Files
GitJournal/lib/settings/app_config.dart
Vishesh Handa e2c1363224 Remove unused code + deps
Both this calendar view and this history screen need a lot of work to
get them to a place where they can be shipped, and there are no plans of
doing that.
2024-08-17 00:47:41 +02:00

142 lines
4.2 KiB
Dart

/*
* SPDX-FileCopyrightText: 2020-2021 Vishesh Handa <me@vhanda.in>
*
* SPDX-License-Identifier: Apache-2.0
*/
import 'package:flutter/material.dart';
import 'package:gitjournal/logger/logger.dart';
import 'package:shared_preferences/shared_preferences.dart';
class AppConfig extends ChangeNotifier {
// singleton
static final AppConfig _singleton = AppConfig._internal();
factory AppConfig() => _singleton;
AppConfig._internal();
static AppConfig get instance => _singleton;
//
// Properties
//
var onBoardingCompleted = false;
var collectCrashReports = true;
int version = 0;
bool proMode = false;
var validateProMode = true;
var debugLogLevel = 'v';
var experimentalSubfolders = false;
var experimentalMarkdownToolbar = false;
var experimentalAccounts = false;
var experimentalTagAutoCompletion = false;
void load(SharedPreferences pref) {
onBoardingCompleted = pref.getBool("onBoardingCompleted") ?? false;
collectCrashReports =
pref.getBool("collectCrashReports") ?? collectCrashReports;
version = pref.getInt("appSettingsVersion") ?? version;
proMode = pref.getBool("proMode") ?? proMode;
validateProMode = pref.getBool("validateProMode") ?? validateProMode;
debugLogLevel = pref.getString("debugLogLevel") ?? debugLogLevel;
experimentalSubfolders =
pref.getBool("experimentalSubfolders") ?? experimentalSubfolders;
experimentalMarkdownToolbar = pref.getBool("experimentalMarkdownToolbar") ??
experimentalMarkdownToolbar;
experimentalAccounts =
pref.getBool("experimentalAccounts") ?? experimentalAccounts;
experimentalTagAutoCompletion =
pref.getBool("experimentalTagAutoCompletion") ??
experimentalTagAutoCompletion;
}
Future<void> save() async {
var pref = await SharedPreferences.getInstance();
var defaultSet = AppConfig._internal();
pref.setBool("onBoardingCompleted", onBoardingCompleted);
_setBool(pref, "collectCrashReports", collectCrashReports,
defaultSet.collectCrashReports);
_setBool(pref, "proMode", proMode, defaultSet.proMode);
_setBool(
pref, "validateProMode", validateProMode, defaultSet.validateProMode);
_setString(pref, "debugLogLevel", debugLogLevel, defaultSet.debugLogLevel);
_setBool(pref, "experimentalSubfolders", experimentalSubfolders,
defaultSet.experimentalSubfolders);
_setBool(pref, "experimentalMarkdownToolbar", experimentalMarkdownToolbar,
defaultSet.experimentalMarkdownToolbar);
_setBool(pref, "experimentalAccounts", experimentalAccounts,
defaultSet.experimentalAccounts);
_setBool(
pref,
"experimentalTagAutoCompletion",
experimentalTagAutoCompletion,
defaultSet.experimentalTagAutoCompletion);
pref.setInt("appSettingsVersion", version);
notifyListeners();
}
Map<String, String> toMap() {
return {
"onBoardingCompleted": onBoardingCompleted.toString(),
"collectCrashReports": collectCrashReports.toString(),
"version": version.toString(),
'validateProMode': validateProMode.toString(),
'proMode': proMode.toString(),
'debugLogLevel': debugLogLevel,
'experimentalMarkdownToolbar': experimentalMarkdownToolbar.toString(),
'experimentalAccounts': experimentalAccounts.toString(),
'experimentalTagAutoCompletion': experimentalTagAutoCompletion.toString(),
};
}
Future<void> _setString(
SharedPreferences pref,
String key,
String value,
String defaultValue,
) async {
if (value == defaultValue) {
await pref.remove(key);
} else {
await pref.setString(key, value);
}
}
Future<void> _setBool(
SharedPreferences pref,
String key,
bool value,
bool defaultValue,
) async {
if (value == defaultValue) {
await pref.remove(key);
} else {
await pref.setBool(key, value);
}
}
}
extension Date on SharedPreferences {
DateTime? getDateTime(String key) {
try {
var v = getInt(key);
if (v == null) return null;
return DateTime.fromMillisecondsSinceEpoch(v * 1000);
} catch (e, st) {
Log.e("getDataTime", ex: e, stacktrace: st);
return null;
}
}
}