2023-09-09 21:17:01 +02:00
|
|
|
import 'dart:convert';
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:device_info_plus/device_info_plus.dart';
|
2022-09-27 15:43:52 +02:00
|
|
|
import 'package:flutter/scheduler.dart';
|
2023-09-09 21:17:01 +02:00
|
|
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
2023-05-17 21:50:13 +02:00
|
|
|
import 'package:store_checker/store_checker.dart';
|
2022-09-26 13:51:18 +02:00
|
|
|
import 'package:package_info_plus/package_info_plus.dart';
|
2022-09-26 16:08:56 +02:00
|
|
|
import 'package:sqflite/sqlite_api.dart';
|
2022-09-26 13:51:18 +02:00
|
|
|
|
2023-09-09 21:17:01 +02:00
|
|
|
import 'package:adguard_home_manager/constants/enums.dart';
|
|
|
|
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
|
2023-05-17 21:50:13 +02:00
|
|
|
import 'package:adguard_home_manager/models/github_release.dart';
|
2023-04-29 00:24:30 +02:00
|
|
|
import 'package:adguard_home_manager/services/db/queries.dart';
|
2022-10-26 14:26:09 +02:00
|
|
|
import 'package:adguard_home_manager/functions/conversions.dart';
|
2022-09-30 01:23:28 +02:00
|
|
|
import 'package:adguard_home_manager/models/app_log.dart';
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
class AppConfigProvider with ChangeNotifier {
|
2022-09-26 16:08:56 +02:00
|
|
|
Database? _dbInstance;
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
PackageInfo? _appInfo;
|
|
|
|
AndroidDeviceInfo? _androidDeviceInfo;
|
|
|
|
IosDeviceInfo? _iosDeviceInfo;
|
|
|
|
|
2022-10-08 22:16:35 +02:00
|
|
|
int _selectedScreen = 0;
|
|
|
|
|
2023-04-30 22:54:39 +02:00
|
|
|
int? _selectedSettingsScreen;
|
|
|
|
|
2022-10-08 22:16:35 +02:00
|
|
|
bool _showingSnackbar = false;
|
|
|
|
|
2022-09-27 15:43:52 +02:00
|
|
|
int _selectedTheme = 0;
|
2022-10-26 14:26:09 +02:00
|
|
|
bool _useDynamicColor = true;
|
|
|
|
int _staticColor = 0;
|
2022-10-26 15:22:50 +02:00
|
|
|
bool _useThemeColorForStatus = false;
|
2022-09-27 15:43:52 +02:00
|
|
|
|
2022-09-29 23:12:24 +02:00
|
|
|
int _selectedClientsTab = 0;
|
2022-10-07 20:48:05 +02:00
|
|
|
int _selectedFiltersTab = 0;
|
2022-09-29 23:12:24 +02:00
|
|
|
|
2023-09-09 21:17:01 +02:00
|
|
|
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
|
|
|
|
|
2023-09-09 21:25:21 +02:00
|
|
|
int _hideServerAddress = 0;
|
|
|
|
|
2022-09-30 01:23:28 +02:00
|
|
|
final List<AppLog> _logs = [];
|
2022-09-30 00:24:56 +02:00
|
|
|
|
2022-09-30 02:24:49 +02:00
|
|
|
int _overrideSslCheck = 0;
|
|
|
|
|
2022-10-04 15:43:16 +02:00
|
|
|
int _hideZeroValues = 0;
|
|
|
|
|
2023-05-20 21:12:52 +02:00
|
|
|
int _showTimeLogs = 0;
|
|
|
|
|
|
|
|
int _showIpLogs = 0;
|
2022-10-27 22:57:59 +02:00
|
|
|
|
2023-05-20 22:57:38 +02:00
|
|
|
int _combinedChartHome = 0;
|
|
|
|
|
2022-10-29 19:16:05 +02:00
|
|
|
String? _doNotRememberVersion;
|
|
|
|
|
2023-05-17 21:50:13 +02:00
|
|
|
GitHubRelease? _appUpdatesAvailable;
|
|
|
|
|
|
|
|
Source _installationSource = Source.UNKNOWN;
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
PackageInfo? get getAppInfo {
|
|
|
|
return _appInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
AndroidDeviceInfo? get androidDeviceInfo {
|
|
|
|
return _androidDeviceInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
IosDeviceInfo? get iosDeviceInfo {
|
|
|
|
return _iosDeviceInfo;
|
|
|
|
}
|
|
|
|
|
2022-09-27 15:43:52 +02:00
|
|
|
ThemeMode get selectedTheme {
|
|
|
|
switch (_selectedTheme) {
|
|
|
|
case 0:
|
|
|
|
return SchedulerBinding.instance.window.platformBrightness == Brightness.light
|
|
|
|
? ThemeMode.light
|
|
|
|
: ThemeMode.dark;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
return ThemeMode.light;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
return ThemeMode.dark;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return ThemeMode.light;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int get selectedThemeNumber {
|
|
|
|
return _selectedTheme;
|
|
|
|
}
|
|
|
|
|
2022-09-29 23:12:24 +02:00
|
|
|
int get selectedClientsTab {
|
|
|
|
return _selectedClientsTab;
|
|
|
|
}
|
2022-09-27 15:43:52 +02:00
|
|
|
|
2022-10-07 20:48:05 +02:00
|
|
|
int get selectedFiltersTab {
|
|
|
|
return _selectedFiltersTab;
|
|
|
|
}
|
|
|
|
|
2022-09-30 01:23:28 +02:00
|
|
|
List<AppLog> get logs {
|
2022-09-30 00:24:56 +02:00
|
|
|
return _logs;
|
|
|
|
}
|
|
|
|
|
2022-09-30 02:24:49 +02:00
|
|
|
bool get overrideSslCheck {
|
|
|
|
return _overrideSslCheck == 1 ? true : false;
|
|
|
|
}
|
|
|
|
|
2022-10-04 15:43:16 +02:00
|
|
|
bool get hideZeroValues {
|
|
|
|
return _hideZeroValues == 1 ? true : false;
|
|
|
|
}
|
|
|
|
|
2022-10-08 22:16:35 +02:00
|
|
|
int get selectedScreen {
|
|
|
|
return _selectedScreen;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool get showingSnackbar {
|
|
|
|
return _showingSnackbar;
|
|
|
|
}
|
|
|
|
|
2022-10-26 14:26:09 +02:00
|
|
|
bool get useDynamicColor {
|
|
|
|
return _useDynamicColor;
|
|
|
|
}
|
|
|
|
|
|
|
|
int get staticColor {
|
|
|
|
return _staticColor;
|
|
|
|
}
|
|
|
|
|
2022-10-26 15:22:50 +02:00
|
|
|
bool get useThemeColorForStatus {
|
|
|
|
return _useThemeColorForStatus;
|
|
|
|
}
|
|
|
|
|
2023-05-20 21:12:52 +02:00
|
|
|
bool get showTimeLogs {
|
|
|
|
return _showTimeLogs == 1 ? true : false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool get showIpLogs {
|
|
|
|
return _showIpLogs == 1 ? true : false;
|
2022-10-27 22:57:59 +02:00
|
|
|
}
|
|
|
|
|
2023-05-20 22:57:38 +02:00
|
|
|
bool get combinedChartHome {
|
|
|
|
return _combinedChartHome == 1 ? true : false;
|
|
|
|
}
|
|
|
|
|
2022-10-29 19:16:05 +02:00
|
|
|
String? get doNotRememberVersion {
|
|
|
|
return _doNotRememberVersion;
|
|
|
|
}
|
|
|
|
|
2023-04-30 22:54:39 +02:00
|
|
|
int? get selectedSettingsScreen {
|
|
|
|
return _selectedSettingsScreen;
|
|
|
|
}
|
|
|
|
|
2023-05-17 21:50:13 +02:00
|
|
|
GitHubRelease? get appUpdatesAvailable {
|
|
|
|
return _appUpdatesAvailable;
|
|
|
|
}
|
|
|
|
|
|
|
|
Source get installationSource {
|
|
|
|
return _installationSource;
|
|
|
|
}
|
|
|
|
|
2023-09-09 21:17:01 +02:00
|
|
|
List<HomeTopItems> get homeTopItemsOrder {
|
|
|
|
return _homeTopItemsOrder;
|
|
|
|
}
|
|
|
|
|
2023-09-09 21:25:21 +02:00
|
|
|
bool get hideServerAddress {
|
|
|
|
return _hideServerAddress == 1 ? true : false;
|
|
|
|
}
|
|
|
|
|
2022-09-26 16:08:56 +02:00
|
|
|
void setDbInstance(Database db) {
|
|
|
|
_dbInstance = db;
|
|
|
|
}
|
|
|
|
|
2022-09-26 13:51:18 +02:00
|
|
|
void setAppInfo(PackageInfo appInfo) {
|
|
|
|
_appInfo = appInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setAndroidInfo(AndroidDeviceInfo deviceInfo) {
|
|
|
|
_androidDeviceInfo = deviceInfo;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setIosInfo(IosDeviceInfo deviceInfo) {
|
|
|
|
_iosDeviceInfo = deviceInfo;
|
|
|
|
}
|
2022-09-27 15:43:52 +02:00
|
|
|
|
2022-09-29 23:12:24 +02:00
|
|
|
void setSelectedClientsTab(int tab) {
|
|
|
|
_selectedClientsTab = tab;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2022-10-07 20:48:05 +02:00
|
|
|
void setSelectedFiltersTab(int tab) {
|
|
|
|
_selectedFiltersTab = tab;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2022-09-30 01:23:28 +02:00
|
|
|
void addLog(AppLog log) {
|
2022-09-30 00:24:56 +02:00
|
|
|
_logs.add(log);
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2022-10-08 22:16:35 +02:00
|
|
|
void setSelectedScreen(int screen) {
|
|
|
|
_selectedScreen = screen;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2022-10-09 20:03:17 +02:00
|
|
|
void setShowingSnackbar(bool status) async {
|
|
|
|
_showingSnackbar = status;
|
2022-10-08 22:16:35 +02:00
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2023-05-02 13:42:01 +02:00
|
|
|
void setSelectedSettingsScreen({required int? screen, bool? notify}) {
|
2023-04-30 22:54:39 +02:00
|
|
|
_selectedSettingsScreen = screen;
|
2023-05-02 13:42:01 +02:00
|
|
|
if (notify == true) {
|
|
|
|
notifyListeners();
|
|
|
|
}
|
2023-04-30 22:54:39 +02:00
|
|
|
}
|
|
|
|
|
2023-05-25 21:14:26 +02:00
|
|
|
void setAppUpdatesAvailable(GitHubRelease? value) {
|
2023-05-17 21:50:13 +02:00
|
|
|
_appUpdatesAvailable = value;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
void setInstallationSource(Source value) {
|
|
|
|
_installationSource = value;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
2022-09-30 02:24:49 +02:00
|
|
|
Future<bool> setOverrideSslCheck(bool status) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'overrideSslCheck',
|
|
|
|
value: status == true ? 1 : 0
|
|
|
|
);
|
2022-09-30 02:24:49 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_overrideSslCheck = status == true ? 1 : 0;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-04 15:43:16 +02:00
|
|
|
Future<bool> setHideZeroValues(bool status) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
2023-05-14 16:19:08 +02:00
|
|
|
column: 'hideZeroValues',
|
2023-04-29 00:24:30 +02:00
|
|
|
value: status == true ? 1 : 0
|
|
|
|
);
|
2022-10-04 15:43:16 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_hideZeroValues = status == true ? 1 : 0;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2022-09-30 02:24:49 +02:00
|
|
|
|
2023-05-20 21:12:52 +02:00
|
|
|
Future<bool> 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;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<bool> setShowIpLogs(bool status) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
2023-05-20 21:12:52 +02:00
|
|
|
column: 'showIpLogs',
|
2023-04-29 00:24:30 +02:00
|
|
|
value: status == true ? 1 : 0
|
|
|
|
);
|
2022-10-27 22:57:59 +02:00
|
|
|
if (updated == true) {
|
2023-05-20 21:12:52 +02:00
|
|
|
_showIpLogs = status == true ? 1 : 0;
|
2022-10-27 22:57:59 +02:00
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-27 15:43:52 +02:00
|
|
|
Future<bool> setSelectedTheme(int value) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'theme',
|
|
|
|
value: value
|
|
|
|
);
|
2022-09-27 15:43:52 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_selectedTheme = value;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-26 14:26:09 +02:00
|
|
|
Future<bool> setUseDynamicColor(bool value) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'useDynamicColor',
|
|
|
|
value: value == true ? 1 : 0
|
|
|
|
);
|
2022-10-26 14:26:09 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_useDynamicColor = value;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-26 15:22:50 +02:00
|
|
|
Future<bool> setUseThemeColorForStatus(bool value) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'useThemeColorForStatus',
|
|
|
|
value: value == true ? 1 : 0
|
|
|
|
);
|
2022-10-26 15:22:50 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_useThemeColorForStatus = value;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-20 22:57:38 +02:00
|
|
|
Future<bool> 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;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-26 14:26:09 +02:00
|
|
|
Future<bool> setStaticColor(int value) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'staticColor',
|
|
|
|
value: value
|
|
|
|
);
|
2022-10-26 14:26:09 +02:00
|
|
|
if (updated == true) {
|
|
|
|
_staticColor = value;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-09 21:17:01 +02:00
|
|
|
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> order) async {
|
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'homeTopItemsOrder',
|
2023-09-09 23:30:53 +02:00
|
|
|
value: jsonEncode(List<String>.from(order.map((e) => e.name)))
|
2023-09-09 21:17:01 +02:00
|
|
|
);
|
|
|
|
if (updated == true) {
|
|
|
|
_homeTopItemsOrder = order;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-09 21:25:21 +02:00
|
|
|
Future<bool> 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;
|
|
|
|
notifyListeners();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-10-29 19:16:05 +02:00
|
|
|
Future<bool> setDoNotRememberVersion(String value) async {
|
2023-04-29 00:24:30 +02:00
|
|
|
final updated = await updateConfigQuery(
|
|
|
|
db: _dbInstance!,
|
|
|
|
column: 'doNotRememberVersion',
|
|
|
|
value: value
|
|
|
|
);
|
|
|
|
return updated;
|
2022-10-27 22:57:59 +02:00
|
|
|
}
|
|
|
|
|
2022-09-27 15:43:52 +02:00
|
|
|
void saveFromDb(Database dbInstance, Map<String, dynamic> dbData) {
|
2023-05-21 14:48:27 +02:00
|
|
|
_selectedTheme = dbData['theme'] ?? 0;
|
|
|
|
_overrideSslCheck = dbData['overrideSslCheck'] ?? 0;
|
2022-10-04 15:43:16 +02:00
|
|
|
_hideZeroValues = dbData['hideZeroValues'];
|
2022-10-26 14:26:09 +02:00
|
|
|
_useDynamicColor = convertFromIntToBool(dbData['useDynamicColor'])!;
|
2023-05-21 14:48:27 +02:00
|
|
|
_staticColor = dbData['staticColor'] ?? 0;
|
2022-10-29 19:16:05 +02:00
|
|
|
_useThemeColorForStatus = dbData['useThemeColorForStatus'] != null ? convertFromIntToBool(dbData['useThemeColorForStatus'])! : false;
|
2023-05-21 14:48:27 +02:00
|
|
|
_showTimeLogs = dbData['showTimeLogs'] ?? 0;
|
2022-10-29 19:16:05 +02:00
|
|
|
_doNotRememberVersion = dbData['doNotRememberVersion'];
|
2023-05-21 14:48:27 +02:00
|
|
|
_showIpLogs = dbData['showIpLogs'] ?? 0;
|
|
|
|
_combinedChartHome = dbData['combinedChart'] ?? 0;
|
2023-09-09 21:25:21 +02:00
|
|
|
_hideServerAddress = dbData['hideServerAddress'];
|
2023-09-09 21:17:01 +02:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2022-09-30 02:24:49 +02:00
|
|
|
|
2022-09-27 15:43:52 +02:00
|
|
|
_dbInstance = dbInstance;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
2022-09-26 13:51:18 +02:00
|
|
|
}
|