diff --git a/lib/main.dart b/lib/main.dart index e6fb4ec..98669e6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,6 +10,7 @@ import 'package:dynamic_color/dynamic_color.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:store_checker/store_checker.dart'; import 'package:window_size/window_size.dart'; @@ -31,8 +32,8 @@ import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/constants/colors.dart'; import 'package:adguard_home_manager/config/globals.dart'; import 'package:adguard_home_manager/config/theme.dart'; -import 'package:adguard_home_manager/classes/http_override.dart'; import 'package:adguard_home_manager/services/db/database.dart'; +import 'package:adguard_home_manager/classes/http_override.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -48,8 +49,12 @@ void main() async { } await dotenv.load(fileName: '.env'); + + final sharedPreferences = await SharedPreferences.getInstance(); - final AppConfigProvider appConfigProvider = AppConfigProvider(); + final AppConfigProvider appConfigProvider = AppConfigProvider( + sharedPreferencesInstance: sharedPreferences + ); final ServersProvider serversProvider = ServersProvider(); final StatusProvider statusProvider = StatusProvider(); final ClientsProvider clientsProvider = ClientsProvider(); @@ -69,9 +74,7 @@ void main() async { appConfigProvider.setIosInfo(iosInfo); } - final dbData = await loadDb(appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31); - - if (dbData['appConfig']['overrideSslCheck'] == 1) { + if (sharedPreferences.getBool('overrideSslCheck') == true) { HttpOverrides.global = MyHttpOverrides(); } @@ -80,10 +83,12 @@ void main() async { appConfigProvider.setInstallationSource(installationSource); } + final dbData = await loadDb(); serversProvider.setDbInstance(dbData['dbInstance']); - appConfigProvider.saveFromDb(dbData['dbInstance'], dbData['appConfig']); serversProvider.saveFromDb(dbData['servers']); + appConfigProvider.saveFromSharedPreferences(); + PackageInfo appInfo = await PackageInfo.fromPlatform(); appConfigProvider.setAppInfo(appInfo); @@ -208,42 +213,45 @@ class _MainState extends State
{ final appConfigProvider = Provider.of(context); return DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => MaterialApp( - title: 'AdGuard Home Manager', - theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31 - ? appConfigProvider.useDynamicColor == true - ? lightTheme(lightDynamic) - : lightThemeOldVersions(colors[appConfigProvider.staticColor]) - : lightThemeOldVersions(colors[appConfigProvider.staticColor]), - darkTheme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31 - ? appConfigProvider.useDynamicColor == true - ? darkTheme(darkDynamic) - : darkThemeOldVersions(colors[appConfigProvider.staticColor]) - : darkThemeOldVersions(colors[appConfigProvider.staticColor]), - themeMode: appConfigProvider.selectedTheme, - debugShowCheckedModeBanner: false, - localizationsDelegates: const [ - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - AppLocalizations.delegate, - ], - supportedLocales: const [ - Locale('en', ''), - Locale('es', ''), - Locale('zh', ''), - Locale('zh', 'CN'), - Locale('pl', ''), - Locale('tr', ''), - Locale('ru', '') - ], - scaffoldMessengerKey: scaffoldMessengerKey, - navigatorKey: globalNavigatorKey, - builder: (context, child) => CustomMenuBar( - child: child!, - ), - home: const Layout(), - ), + builder: (lightDynamic, darkDynamic) { + appConfigProvider.setSupportsDynamicTheme(lightDynamic != null && darkDynamic != null); + return MaterialApp( + title: 'AdGuard Home Manager', + theme: lightDynamic != null + ? appConfigProvider.useDynamicColor == true + ? lightTheme(lightDynamic) + : lightThemeOldVersions(colors[appConfigProvider.staticColor]) + : lightThemeOldVersions(colors[appConfigProvider.staticColor]), + darkTheme: darkDynamic != null + ? appConfigProvider.useDynamicColor == true + ? darkTheme(darkDynamic) + : darkThemeOldVersions(colors[appConfigProvider.staticColor]) + : darkThemeOldVersions(colors[appConfigProvider.staticColor]), + themeMode: appConfigProvider.selectedTheme, + debugShowCheckedModeBanner: false, + localizationsDelegates: const [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + AppLocalizations.delegate, + ], + supportedLocales: const [ + Locale('en', ''), + Locale('es', ''), + Locale('zh', ''), + Locale('zh', 'CN'), + Locale('pl', ''), + Locale('tr', ''), + Locale('ru', '') + ], + scaffoldMessengerKey: scaffoldMessengerKey, + navigatorKey: globalNavigatorKey, + builder: (context, child) => CustomMenuBar( + child: child!, + ), + home: const Layout(), + ); + } ); } } \ No newline at end of file diff --git a/lib/providers/app_config_provider.dart b/lib/providers/app_config_provider.dart index 99e2f0f..6b73520 100644 --- a/lib/providers/app_config_provider.dart +++ b/lib/providers/app_config_provider.dart @@ -1,22 +1,23 @@ -import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/scheduler.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:store_checker/store_checker.dart'; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:sqflite/sqlite_api.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/config/home_top_items_default_order.dart'; import 'package:adguard_home_manager/models/github_release.dart'; -import 'package:adguard_home_manager/services/db/queries.dart'; -import 'package:adguard_home_manager/functions/conversions.dart'; import 'package:adguard_home_manager/models/app_log.dart'; class AppConfigProvider with ChangeNotifier { - Database? _dbInstance; + final SharedPreferences sharedPreferencesInstance; + + AppConfigProvider({ + required this.sharedPreferencesInstance + }); PackageInfo? _appInfo; AndroidDeviceInfo? _androidDeviceInfo; @@ -28,6 +29,7 @@ class AppConfigProvider with ChangeNotifier { bool _showingSnackbar = false; + bool _supportsDynamicTheme = true; int _selectedTheme = 0; bool _useDynamicColor = true; int _staticColor = 0; @@ -38,19 +40,19 @@ class AppConfigProvider with ChangeNotifier { List _homeTopItemsOrder = homeTopItemsDefaultOrder; - int _hideServerAddress = 0; + bool _hideServerAddress = false; final List _logs = []; - int _overrideSslCheck = 0; + bool _overrideSslCheck = false; - int _hideZeroValues = 0; + bool _hideZeroValues = false; - int _showTimeLogs = 0; + bool _showTimeLogs = false; - int _showIpLogs = 0; + bool _showIpLogs = false; - int _combinedChartHome = 0; + bool _combinedChartHome = false; String? _doNotRememberVersion; @@ -88,6 +90,10 @@ class AppConfigProvider with ChangeNotifier { } } + bool get supportsDynamicTheme { + return _supportsDynamicTheme; + } + int get selectedThemeNumber { return _selectedTheme; } @@ -105,11 +111,11 @@ class AppConfigProvider with ChangeNotifier { } bool get overrideSslCheck { - return _overrideSslCheck == 1 ? true : false; + return _overrideSslCheck; } bool get hideZeroValues { - return _hideZeroValues == 1 ? true : false; + return _hideZeroValues; } int get selectedScreen { @@ -133,15 +139,15 @@ class AppConfigProvider with ChangeNotifier { } bool get showTimeLogs { - return _showTimeLogs == 1 ? true : false; + return _showTimeLogs; } bool get showIpLogs { - return _showIpLogs == 1 ? true : false; + return _showIpLogs; } bool get combinedChartHome { - return _combinedChartHome == 1 ? true : false; + return _combinedChartHome; } String? get doNotRememberVersion { @@ -165,11 +171,11 @@ class AppConfigProvider with ChangeNotifier { } bool get hideServerAddress { - return _hideServerAddress == 1 ? true : false; + return _hideServerAddress; } - void setDbInstance(Database db) { - _dbInstance = db; + void setSupportsDynamicTheme(bool value) { + _supportsDynamicTheme = value; } void setAppInfo(PackageInfo appInfo) { @@ -227,206 +233,145 @@ class AppConfigProvider with ChangeNotifier { } Future setOverrideSslCheck(bool status) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'overrideSslCheck', - value: status == true ? 1 : 0 - ); - if (updated == true) { - _overrideSslCheck = status == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('overrideSslCheck', status); + _overrideSslCheck = status; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setHideZeroValues(bool status) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'hideZeroValues', - value: status == true ? 1 : 0 - ); - if (updated == true) { - _hideZeroValues = status == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('hideZeroValues', status); + _hideZeroValues = status; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setshowTimeLogs(bool status) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'showTimeLogs', - value: status == true ? 1 : 0 - ); - if (updated == true) { - _showTimeLogs = status == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('showTimeLogs', status); + _showTimeLogs = status; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setShowIpLogs(bool status) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'showIpLogs', - value: status == true ? 1 : 0 - ); - if (updated == true) { - _showIpLogs = status == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('showIpLogs', status); + _showIpLogs = status; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setSelectedTheme(int value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'theme', - value: value - ); - if (updated == true) { + try { + sharedPreferencesInstance.setInt('selectedTheme', value); _selectedTheme = value; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setUseDynamicColor(bool value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'useDynamicColor', - value: value == true ? 1 : 0 - ); - if (updated == true) { + try { + sharedPreferencesInstance.setBool('useDynamicColor', value); _useDynamicColor = value; notifyListeners(); return true; - } - else { - return false; - } - } - - Future setUseThemeColorForStatus(bool value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'useThemeColorForStatus', - value: value == true ? 1 : 0 - ); - if (updated == true) { - _useThemeColorForStatus = value; - notifyListeners(); - return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setCombinedChartHome(bool value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'combinedChart', - value: value == true ? 1 : 0 - ); - if (updated == true) { - _combinedChartHome = value == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('combinedChart', value); + _combinedChartHome = value; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setStaticColor(int value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'staticColor', - value: value - ); - if (updated == true) { + try { + sharedPreferencesInstance.setInt('staticColor', value); _staticColor = value; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setHomeTopItemsOrder(List order) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'homeTopItemsOrder', - value: jsonEncode(List.from(order.map((e) => e.name))) - ); - if (updated == true) { + try { + sharedPreferencesInstance.setStringList('homeTopItemsOrder', List.from(order.map((e) => e.name))); _homeTopItemsOrder = order; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setHideServerAddress(bool value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'hideServerAddress', - value: value == true ? 1 : 0 - ); - if (updated == true) { - _hideServerAddress = value == true ? 1 : 0; + try { + sharedPreferencesInstance.setBool('hideServerAddress', value); + _hideServerAddress = value; notifyListeners(); return true; - } - else { + } catch (e, stackTrace) { + Sentry.captureException(e, stackTrace: stackTrace); return false; } } Future setDoNotRememberVersion(String value) async { - final updated = await updateConfigQuery( - db: _dbInstance!, - column: 'doNotRememberVersion', - value: value - ); + final updated = await sharedPreferencesInstance.setString('hideServerAddress', value); return updated; } - - void saveFromDb(Database dbInstance, Map dbData) { - _selectedTheme = dbData['theme'] ?? 0; - _overrideSslCheck = dbData['overrideSslCheck'] ?? 0; - _hideZeroValues = dbData['hideZeroValues']; - _useDynamicColor = convertFromIntToBool(dbData['useDynamicColor'])!; - _staticColor = dbData['staticColor'] ?? 0; - _useThemeColorForStatus = dbData['useThemeColorForStatus'] != null ? convertFromIntToBool(dbData['useThemeColorForStatus'])! : false; - _showTimeLogs = dbData['showTimeLogs'] ?? 0; - _doNotRememberVersion = dbData['doNotRememberVersion']; - _showIpLogs = dbData['showIpLogs'] ?? 0; - _combinedChartHome = dbData['combinedChart'] ?? 0; - _hideServerAddress = dbData['hideServerAddress']; - if (dbData['homeTopItemsOrder'] != null) { + + void saveFromSharedPreferences() { + _selectedTheme = sharedPreferencesInstance.getInt('selectedTheme') ?? 0; + _overrideSslCheck = sharedPreferencesInstance.getBool('overrideSslCheck') ?? false; + _hideZeroValues = sharedPreferencesInstance.getBool('hideZeroValues') ?? false; + _useDynamicColor = sharedPreferencesInstance.getBool('useDynamicColor') ?? true; + _staticColor = sharedPreferencesInstance.getInt('staticColor') ?? 0; + _showTimeLogs = sharedPreferencesInstance.getBool('showTimeLogs') ?? false; + _doNotRememberVersion = sharedPreferencesInstance.getString('doNotRememberVersion'); + _showIpLogs = sharedPreferencesInstance.getBool('showIpLogs') ?? false; + _combinedChartHome = sharedPreferencesInstance.getBool('combinedChart') ?? false; + _hideServerAddress = sharedPreferencesInstance.getBool('hideServerAddress') ?? false; + if (sharedPreferencesInstance.getStringList('homeTopItemsOrder') != null) { try { final itemsOrder = List.from( - List.from(jsonDecode(dbData['homeTopItemsOrder'])).map((e) { + List.from(sharedPreferencesInstance.getStringList('homeTopItemsOrder')!).map((e) { switch (e) { case 'queriedDomains': return HomeTopItems.queriedDomains; @@ -458,8 +403,5 @@ class AppConfigProvider with ChangeNotifier { _homeTopItemsOrder = homeTopItemsDefaultOrder; } } - - _dbInstance = dbInstance; - notifyListeners(); } } \ No newline at end of file diff --git a/lib/screens/settings/customization/customization.dart b/lib/screens/settings/customization/customization.dart index 7bec949..38f93a3 100644 --- a/lib/screens/settings/customization/customization.dart +++ b/lib/screens/settings/customization/customization.dart @@ -120,7 +120,7 @@ class _CustomizationWidgetState extends State { label: AppLocalizations.of(context)!.color, padding: const EdgeInsets.only(top: 45, left: 16, right: 16, bottom: 5), ), - if (appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31) CustomSwitchListTile( + if (appConfigProvider.supportsDynamicTheme) CustomSwitchListTile( value: dynamicColor, onChanged: (value) { setState(() => dynamicColor = value); @@ -129,7 +129,10 @@ class _CustomizationWidgetState extends State { title: AppLocalizations.of(context)!.useDynamicTheme, ), if (!(appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31)) const SizedBox(height: 20), - if (dynamicColor == false) Padding( + if ( + appConfigProvider.supportsDynamicTheme == false || + (appConfigProvider.supportsDynamicTheme == true && dynamicColor == false) + ) Padding( padding: const EdgeInsets.only(bottom: 8, left: 16, right: 16), child: Scrollbar( controller: _colorsScrollController, @@ -207,15 +210,6 @@ class _CustomizationWidgetState extends State { ), ), ), - CustomSwitchListTile( - value: useThemeColorInsteadGreenRed, - onChanged: (value) { - setState(() => useThemeColorInsteadGreenRed = value); - appConfigProvider.setUseThemeColorForStatus(value); - }, - title: AppLocalizations.of(context)!.useThemeColorStatus, - subtitle: AppLocalizations.of(context)!.useThemeColorStatusDescription, - ) ], ), ), diff --git a/lib/services/db/database.dart b/lib/services/db/database.dart index b60b38a..fa82957 100644 --- a/lib/services/db/database.dart +++ b/lib/services/db/database.dart @@ -1,141 +1,7 @@ import 'package:sqflite/sqflite.dart'; -import 'package:adguard_home_manager/config/home_top_items_default_order.dart'; - -Future> loadDb(bool acceptsDynamicTheme) async { +Future> loadDb() async { List>? servers; - List>? appConfig; - - Future rebuildAppConfig(Database db) async { - await db.execute("DROP TABLE appConfig"); - await db.execute("CREATE TABLE appConfig (theme NUMERIC, overrideSslCheck NUMERIC, hideZeroValues NUMERIC, useDynamicColor NUMERIC, staticColor NUMERIC, useThemeColorForStatus NUMERIC, showTimeLogs NUMERIC, showIpLogs NUMERIC, combinedChart NUMERIC, doNotRememberVersion TEXT)"); - await db.execute("INSERT INTO appConfig (theme, overrideSslCheck, hideZeroValues, useDynamicColor, staticColor, useThemeColorForStatus, showTimeLogs, showIpLogs, combinedChart) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0)"); - } - - Future upgradeDbToV2(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN overrideSslCheck NUMERIC"); - await db.execute("UPDATE appConfig SET overrideSslCheck = 0"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV3(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN hideZeroValues NUMERIC"); - await db.execute("UPDATE appConfig SET hideZeroValues = 0"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV4(Database db) async { - await db.execute("ALTER TABLE servers ADD COLUMN runningOnHa INTEGER"); - await db.execute("UPDATE servers SET runningOnHa = 0"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM servers', - ); - }); - } - - Future upgradeDbToV5(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN useDynamicColor NUMERIC"); - await db.execute("ALTER TABLE appConfig ADD COLUMN staticColor NUMERIC"); - await db.execute("ALTER TABLE appConfig ADD COLUMN useThemeColorForStatus NUMERIC"); - await db.execute("UPDATE appConfig SET useDynamicColor = ${acceptsDynamicTheme == true ? 1 : 0}, staticColor = 0, useThemeColorForStatus = 0"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV6(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN showNameTimeLogs NUMERIC"); - await db.execute("UPDATE appConfig SET showNameTimeLogs = 0"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV7(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN doNotRememberVersion TEXT"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV8(Database db) async { - try { - final data = await db.rawQuery( - 'SELECT * FROM appConfig', - ); - await rebuildAppConfig(db); - await db.update( - 'appConfig', - { - 'theme': data[0]['theme'], - 'overrideSslCheck': data[0]['overrideSslCheck'], - 'hideZeroValues': data[0]['hideZeroValues'], - 'useDynamicColor': data[0]['useDynamicColor'], - 'staticColor': data[0]['staticColor'], - 'useThemeColorForStatus': data[0]['useThemeColorForStatus'], - 'showTimeLogs': data[0]['showNameTimeLogs'], - 'showIpLogs': data[0]['showIpLogs'], - 'combinedChart': data[0]['combinedChart'], - } - ); - } catch (e) { - await rebuildAppConfig(db); - } - } - - Future upgradeDbToV9(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN hideServerAddress NUMERIC"); - await db.execute("ALTER TABLE appConfig ADD COLUMN homeTopItemsOrder TEXT"); - await db.execute("UPDATE appConfig SET hideServerAddress = 0, homeTopItemsOrder = '$homeTopItemsDefaultOrderString'"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV10(Database db) async { - await db.execute("ALTER TABLE appConfig ADD COLUMN showTopItemsChart NUMERIC"); - await db.execute("UPDATE appConfig SET showTopItemsChart = 1"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } - - Future upgradeDbToV11(Database db) async { - await db.execute("ALTER TABLE appConfig DROP COLUMN showTopItemsChart"); - - await db.transaction((txn) async{ - await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); - } Database db = await openDatabase( 'adguard_home_manager.db', @@ -159,135 +25,9 @@ Future> loadDb(bool acceptsDynamicTheme) async { ) """ ); - - await db.execute( - """ - CREATE TABLE - appConfig ( - theme NUMERIC, - overrideSslCheck NUMERIC, - hideZeroValues NUMERIC, - useDynamicColor NUMERIC, - staticColor NUMERIC, - useThemeColorForStatus NUMERIC, - showTimeLogs NUMERIC, - showIpLogs NUMERIC, - combinedChart NUMERIC, - doNotRememberVersion TEXT, - hideServerAddress NUMERIC, - homeTopItemsOrder TEXT - ) - """ - ); - - await db.execute( - """ - INSERT INTO - appConfig ( - theme, - overrideSslCheck, - hideZeroValues, - useDynamicColor, - staticColor, - useThemeColorForStatus, - showTimeLogs, - showIpLogs, - combinedChart, - hideServerAddress, - homeTopItemsOrder - ) - VALUES ( - 0, - 0, - 0, - ${acceptsDynamicTheme == true ? 1 : 0}, - 0, - 0, - 0, - 0, - 0, - 0, - '$homeTopItemsDefaultOrderString' - ) - """ - ); }, onUpgrade: (Database db, int oldVersion, int newVersion) async { - if (oldVersion == 1) { - await upgradeDbToV2(db); - await upgradeDbToV3(db); - await upgradeDbToV4(db); - await upgradeDbToV5(db); - await upgradeDbToV6(db); - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 2) { - await upgradeDbToV3(db); - await upgradeDbToV4(db); - await upgradeDbToV5(db); - await upgradeDbToV6(db); - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 3) { - await upgradeDbToV4(db); - await upgradeDbToV5(db); - await upgradeDbToV6(db); - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 4) { - await upgradeDbToV5(db); - await upgradeDbToV6(db); - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 5) { - await upgradeDbToV6(db); - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 6) { - await upgradeDbToV7(db); - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 7) { - await upgradeDbToV8(db); - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 8) { - await upgradeDbToV9(db); - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 9) { - await upgradeDbToV10(db); - await upgradeDbToV11(db); - } - if (oldVersion == 10) { - await upgradeDbToV11(db); - } + }, onOpen: (Database db) async { await db.transaction((txn) async{ @@ -295,17 +35,11 @@ Future> loadDb(bool acceptsDynamicTheme) async { 'SELECT * FROM servers', ); }); - await db.transaction((txn) async{ - appConfig = await txn.rawQuery( - 'SELECT * FROM appConfig', - ); - }); } ); return { "servers": servers, - "appConfig": appConfig![0], "dbInstance": db, }; } \ No newline at end of file diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 31a4f66..045b44f 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,6 +9,7 @@ import device_info_plus import dynamic_color import package_info_plus import sentry_flutter +import shared_preferences_foundation import sqflite import sqlite3_flutter_libs import url_launcher_macos @@ -19,6 +20,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin")) + SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) diff --git a/pubspec.lock b/pubspec.lock index d584bfa..0f65427 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -502,6 +502,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + url: "https://pub.dev" + source: hosted + version: "2.2.1" percent_indicator: dependency: "direct main" description: @@ -526,6 +550,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.0" + platform: + dependency: transitive + description: + name: platform + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" + url: "https://pub.dev" + source: hosted + version: "3.1.4" plugin_platform_interface: dependency: transitive description: @@ -574,6 +606,62 @@ packages: url: "https://pub.dev" source: hosted version: "7.15.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" + url: "https://pub.dev" + source: hosted + version: "2.3.5" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" sky_engine: dependency: transitive description: flutter @@ -852,6 +940,14 @@ packages: url: "https://github.com/google/flutter-desktop-embedding" source: git version: "0.1.0" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index aa5c383..c4119e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -77,6 +77,7 @@ dependencies: timezone: ^0.9.2 flutter_custom_tabs: ^2.0.0+1 url_launcher: ^6.2.4 + shared_preferences: ^2.2.2 dev_dependencies: flutter_test: