From a38c9bf4b0252ffdbf7c20292ba1b3d32fcdca40 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sat, 9 Sep 2023 21:17:01 +0200 Subject: [PATCH] Database preparations for new features --- lib/config/home_top_items_default_order.dart | 11 +++++ lib/constants/enums.dart | 3 +- lib/providers/app_config_provider.dart | 51 ++++++++++++++++++++ lib/services/db/database.dart | 30 ++++++++++-- 4 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 lib/config/home_top_items_default_order.dart diff --git a/lib/config/home_top_items_default_order.dart b/lib/config/home_top_items_default_order.dart new file mode 100644 index 0000000..1f49093 --- /dev/null +++ b/lib/config/home_top_items_default_order.dart @@ -0,0 +1,11 @@ +import 'dart:convert'; + +import 'package:adguard_home_manager/constants/enums.dart'; + +final List homeTopItemsDefaultOrder = [ + HomeTopItems.queriedDomains, + HomeTopItems.blockedDomains, + HomeTopItems.recurrentClients +]; + +final String homeTopItemsDefaultOrderString = jsonEncode(homeTopItemsDefaultOrder); \ No newline at end of file diff --git a/lib/constants/enums.dart b/lib/constants/enums.dart index 58f5509..fed648e 100644 --- a/lib/constants/enums.dart +++ b/lib/constants/enums.dart @@ -1 +1,2 @@ -enum LoadStatus { loading, loaded, error } \ No newline at end of file +enum LoadStatus { loading, loaded, error } +enum HomeTopItems { queriedDomains, blockedDomains, recurrentClients } \ No newline at end of file diff --git a/lib/providers/app_config_provider.dart b/lib/providers/app_config_provider.dart index 7aeb917..eefab88 100644 --- a/lib/providers/app_config_provider.dart +++ b/lib/providers/app_config_provider.dart @@ -1,10 +1,15 @@ +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: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'; @@ -31,6 +36,8 @@ class AppConfigProvider with ChangeNotifier { int _selectedClientsTab = 0; int _selectedFiltersTab = 0; + List _homeTopItemsOrder = homeTopItemsDefaultOrder; + final List _logs = []; int _overrideSslCheck = 0; @@ -151,6 +158,10 @@ class AppConfigProvider with ChangeNotifier { return _installationSource; } + List get homeTopItemsOrder { + return _homeTopItemsOrder; + } + void setDbInstance(Database db) { _dbInstance = db; } @@ -353,6 +364,22 @@ class AppConfigProvider with ChangeNotifier { } } + Future setHomeTopItemsOrder(List order) async { + final updated = await updateConfigQuery( + db: _dbInstance!, + column: 'homeTopItemsOrder', + value: jsonEncode(order) + ); + if (updated == true) { + _homeTopItemsOrder = order; + notifyListeners(); + return true; + } + else { + return false; + } + } + Future setDoNotRememberVersion(String value) async { final updated = await updateConfigQuery( db: _dbInstance!, @@ -373,6 +400,30 @@ class AppConfigProvider with ChangeNotifier { _doNotRememberVersion = dbData['doNotRememberVersion']; _showIpLogs = dbData['showIpLogs'] ?? 0; _combinedChartHome = dbData['combinedChart'] ?? 0; + if (dbData['homeTopItemsOrder'] != null) { + try { + _homeTopItemsOrder = List.from( + List.from(jsonDecode(dbData['homeTopItemsOrder'])).map((e) { + switch (e) { + case 'queriedDomains': + return HomeTopItems.queriedDomains; + + case 'blockedDomains': + return HomeTopItems.blockedDomains; + + case 'recurrentClients': + return HomeTopItems.recurrentClients; + + default: + return null; + } + }).where((e) => e != null).toList() + ); + } catch (e) { + Sentry.captureException(e); + _homeTopItemsOrder = homeTopItemsDefaultOrder; + } + } _dbInstance = dbInstance; notifyListeners(); diff --git a/lib/services/db/database.dart b/lib/services/db/database.dart index 9a9ac18..66bd269 100644 --- a/lib/services/db/database.dart +++ b/lib/services/db/database.dart @@ -1,5 +1,7 @@ import 'package:sqflite/sqflite.dart'; +import 'package:adguard_home_manager/config/home_top_items_default_order.dart'; + Future> loadDb(bool acceptsDynamicTheme) async { List>? servers; List>? appConfig; @@ -102,13 +104,25 @@ Future> loadDb(bool acceptsDynamicTheme) async { } } + 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', + ); + }); + } + Database db = await openDatabase( 'adguard_home_manager.db', - version: 8, + version: 9, onCreate: (Database db, int version) async { await db.execute("CREATE TABLE servers (id TEXT PRIMARY KEY, name TEXT, connectionMethod TEXT, domain TEXT, path TEXT, port INTEGER, user TEXT, password TEXT, defaultServer INTEGER, authToken TEXT, runningOnHa INTEGER)"); - 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)"); + 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) { @@ -119,6 +133,7 @@ Future> loadDb(bool acceptsDynamicTheme) async { await upgradeDbToV6(db); await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 2) { await upgradeDbToV3(db); @@ -127,6 +142,7 @@ Future> loadDb(bool acceptsDynamicTheme) async { await upgradeDbToV6(db); await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 3) { await upgradeDbToV4(db); @@ -134,24 +150,32 @@ Future> loadDb(bool acceptsDynamicTheme) async { await upgradeDbToV6(db); await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 4) { await upgradeDbToV5(db); await upgradeDbToV6(db); await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 5) { await upgradeDbToV6(db); await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 6) { await upgradeDbToV7(db); await upgradeDbToV8(db); + await upgradeDbToV9(db); } if (oldVersion == 7) { await upgradeDbToV8(db); + await upgradeDbToV9(db); + } + if (oldVersion == 8) { + await upgradeDbToV9(db); } }, onOpen: (Database db) async {