Database preparations for new features

This commit is contained in:
Juan Gilsanz Polo 2023-09-09 21:17:01 +02:00
parent 2f40415ada
commit a38c9bf4b0
4 changed files with 91 additions and 4 deletions

View file

@ -0,0 +1,11 @@
import 'dart:convert';
import 'package:adguard_home_manager/constants/enums.dart';
final List<HomeTopItems> homeTopItemsDefaultOrder = [
HomeTopItems.queriedDomains,
HomeTopItems.blockedDomains,
HomeTopItems.recurrentClients
];
final String homeTopItemsDefaultOrderString = jsonEncode(homeTopItemsDefaultOrder);

View file

@ -1 +1,2 @@
enum LoadStatus { loading, loaded, error } enum LoadStatus { loading, loaded, error }
enum HomeTopItems { queriedDomains, blockedDomains, recurrentClients }

View file

@ -1,10 +1,15 @@
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:store_checker/store_checker.dart'; import 'package:store_checker/store_checker.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
import 'package:sqflite/sqlite_api.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/models/github_release.dart';
import 'package:adguard_home_manager/services/db/queries.dart'; import 'package:adguard_home_manager/services/db/queries.dart';
import 'package:adguard_home_manager/functions/conversions.dart'; import 'package:adguard_home_manager/functions/conversions.dart';
@ -31,6 +36,8 @@ class AppConfigProvider with ChangeNotifier {
int _selectedClientsTab = 0; int _selectedClientsTab = 0;
int _selectedFiltersTab = 0; int _selectedFiltersTab = 0;
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
final List<AppLog> _logs = []; final List<AppLog> _logs = [];
int _overrideSslCheck = 0; int _overrideSslCheck = 0;
@ -151,6 +158,10 @@ class AppConfigProvider with ChangeNotifier {
return _installationSource; return _installationSource;
} }
List<HomeTopItems> get homeTopItemsOrder {
return _homeTopItemsOrder;
}
void setDbInstance(Database db) { void setDbInstance(Database db) {
_dbInstance = db; _dbInstance = db;
} }
@ -353,6 +364,22 @@ class AppConfigProvider with ChangeNotifier {
} }
} }
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> 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<bool> setDoNotRememberVersion(String value) async { Future<bool> setDoNotRememberVersion(String value) async {
final updated = await updateConfigQuery( final updated = await updateConfigQuery(
db: _dbInstance!, db: _dbInstance!,
@ -373,6 +400,30 @@ class AppConfigProvider with ChangeNotifier {
_doNotRememberVersion = dbData['doNotRememberVersion']; _doNotRememberVersion = dbData['doNotRememberVersion'];
_showIpLogs = dbData['showIpLogs'] ?? 0; _showIpLogs = dbData['showIpLogs'] ?? 0;
_combinedChartHome = dbData['combinedChart'] ?? 0; _combinedChartHome = dbData['combinedChart'] ?? 0;
if (dbData['homeTopItemsOrder'] != null) {
try {
_homeTopItemsOrder = List<HomeTopItems>.from(
List<String>.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; _dbInstance = dbInstance;
notifyListeners(); notifyListeners();

View file

@ -1,5 +1,7 @@
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async { Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
List<Map<String, Object?>>? servers; List<Map<String, Object?>>? servers;
List<Map<String, Object?>>? appConfig; List<Map<String, Object?>>? appConfig;
@ -102,13 +104,25 @@ Future<Map<String, dynamic>> 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( Database db = await openDatabase(
'adguard_home_manager.db', 'adguard_home_manager.db',
version: 8, version: 9,
onCreate: (Database db, int version) async { 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 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("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) VALUES (0, 0, 0, ${acceptsDynamicTheme == true ? 1 : 0}, 0, 0, 0, 0, 0)"); 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 { onUpgrade: (Database db, int oldVersion, int newVersion) async {
if (oldVersion == 1) { if (oldVersion == 1) {
@ -119,6 +133,7 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
await upgradeDbToV6(db); await upgradeDbToV6(db);
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 2) { if (oldVersion == 2) {
await upgradeDbToV3(db); await upgradeDbToV3(db);
@ -127,6 +142,7 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
await upgradeDbToV6(db); await upgradeDbToV6(db);
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 3) { if (oldVersion == 3) {
await upgradeDbToV4(db); await upgradeDbToV4(db);
@ -134,24 +150,32 @@ Future<Map<String, dynamic>> loadDb(bool acceptsDynamicTheme) async {
await upgradeDbToV6(db); await upgradeDbToV6(db);
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 4) { if (oldVersion == 4) {
await upgradeDbToV5(db); await upgradeDbToV5(db);
await upgradeDbToV6(db); await upgradeDbToV6(db);
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 5) { if (oldVersion == 5) {
await upgradeDbToV6(db); await upgradeDbToV6(db);
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 6) { if (oldVersion == 6) {
await upgradeDbToV7(db); await upgradeDbToV7(db);
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
} }
if (oldVersion == 7) { if (oldVersion == 7) {
await upgradeDbToV8(db); await upgradeDbToV8(db);
await upgradeDbToV9(db);
}
if (oldVersion == 8) {
await upgradeDbToV9(db);
} }
}, },
onOpen: (Database db) async { onOpen: (Database db) async {