mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-25 11:22:23 +00:00
Changed queries and added macOS support
This commit is contained in:
parent
6ba9eecf8e
commit
e53f4f5972
40 changed files with 1680 additions and 214 deletions
|
@ -1,6 +1,7 @@
|
|||
// ignore_for_file: use_build_context_synchronously, depend_on_referenced_packages
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:animations/animations.dart';
|
||||
|
@ -53,12 +54,14 @@ class _BaseState extends State<Base> with WidgetsBindingObserver {
|
|||
}
|
||||
|
||||
Future<GitHubRelease?> checkInstallationSource() async {
|
||||
Source installationSource = await StoreChecker.getSource;
|
||||
if (installationSource != Source.IS_INSTALLED_FROM_PLAY_STORE) {
|
||||
final result = await checkAppUpdatesGitHub();
|
||||
if (result['result'] == 'success') {
|
||||
if (updateExists(widget.appConfigProvider.getAppInfo!.version, result['body'].tagName)) {
|
||||
return result['body'];
|
||||
if (Platform.isAndroid) {
|
||||
Source installationSource = await StoreChecker.getSource;
|
||||
if (installationSource != Source.IS_INSTALLED_FROM_PLAY_STORE) {
|
||||
final result = await checkAppUpdatesGitHub();
|
||||
if (result['result'] == 'success') {
|
||||
if (updateExists(widget.appConfigProvider.getAppInfo!.version, result['body'].tagName)) {
|
||||
return result['body'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,18 +7,20 @@ import 'package:provider/provider.dart';
|
|||
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:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
import 'package:window_size/window_size.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
import 'package:adguard_home_manager/base.dart';
|
||||
|
||||
import 'package:adguard_home_manager/classes/http_override.dart';
|
||||
import 'package:adguard_home_manager/services/database.dart';
|
||||
import 'package:adguard_home_manager/services/db/database.dart';
|
||||
import 'package:adguard_home_manager/constants/colors.dart';
|
||||
import 'package:adguard_home_manager/providers/logs_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/config/theme.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
|
||||
void main() async {
|
||||
|
@ -26,6 +28,15 @@ void main() async {
|
|||
SystemChrome.setPreferredOrientations(
|
||||
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]
|
||||
);
|
||||
|
||||
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
|
||||
setWindowMinSize(const Size(500, 500));
|
||||
}
|
||||
|
||||
if (Platform.isWindows || Platform.isLinux) {
|
||||
sqfliteFfiInit();
|
||||
databaseFactory = databaseFactoryFfi;
|
||||
}
|
||||
|
||||
AppConfigProvider appConfigProvider = AppConfigProvider();
|
||||
ServersProvider serversProvider = ServersProvider();
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'package:flutter/scheduler.dart';
|
|||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:sqflite/sqlite_api.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';
|
||||
|
||||
|
@ -160,7 +161,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setOverrideSslCheck(bool status) async {
|
||||
final updated = await _updateOverrideSslCheck(status == true ? 1 : 0);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'overrideSslCheck',
|
||||
value: status == true ? 1 : 0
|
||||
);
|
||||
if (updated == true) {
|
||||
_overrideSslCheck = status == true ? 1 : 0;
|
||||
notifyListeners();
|
||||
|
@ -172,7 +177,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setHideZeroValues(bool status) async {
|
||||
final updated = await _updateSetHideZeroValues(status == true ? 1 : 0);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'overrideSslCheck',
|
||||
value: status == true ? 1 : 0
|
||||
);
|
||||
if (updated == true) {
|
||||
_hideZeroValues = status == true ? 1 : 0;
|
||||
notifyListeners();
|
||||
|
@ -184,7 +193,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setShowNameTimeLogs(bool status) async {
|
||||
final updated = await _updateShowNameTimeLogsDb(status == true ? 1 : 0);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'showNameTimeLogs',
|
||||
value: status == true ? 1 : 0
|
||||
);
|
||||
if (updated == true) {
|
||||
_showNameTimeLogs = status == true ? 1 : 0;
|
||||
notifyListeners();
|
||||
|
@ -196,7 +209,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setSelectedTheme(int value) async {
|
||||
final updated = await _updateThemeDb(value);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'theme',
|
||||
value: value
|
||||
);
|
||||
if (updated == true) {
|
||||
_selectedTheme = value;
|
||||
notifyListeners();
|
||||
|
@ -208,7 +225,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setUseDynamicColor(bool value) async {
|
||||
final updated = await _updateDynamicColorDb(value == true ? 1 : 0);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'useDynamicColor',
|
||||
value: value == true ? 1 : 0
|
||||
);
|
||||
if (updated == true) {
|
||||
_useDynamicColor = value;
|
||||
notifyListeners();
|
||||
|
@ -220,7 +241,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setUseThemeColorForStatus(bool value) async {
|
||||
final updated = await _updateUseThemeColorForStatusDb(value == true ? 1 : 0);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'useThemeColorForStatus',
|
||||
value: value == true ? 1 : 0
|
||||
);
|
||||
if (updated == true) {
|
||||
_useThemeColorForStatus = value;
|
||||
notifyListeners();
|
||||
|
@ -232,7 +257,11 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setStaticColor(int value) async {
|
||||
final updated = await _updateStaticColorDb(value);
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'staticColor',
|
||||
value: value
|
||||
);
|
||||
if (updated == true) {
|
||||
_staticColor = value;
|
||||
notifyListeners();
|
||||
|
@ -244,109 +273,12 @@ class AppConfigProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> setDoNotRememberVersion(String value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET doNotRememberVersion = "$value"',
|
||||
);
|
||||
_doNotRememberVersion = value;
|
||||
notifyListeners();
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateThemeDb(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET theme = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateDynamicColorDb(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET useDynamicColor = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateUseThemeColorForStatusDb(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET useThemeColorForStatus = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateStaticColorDb(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET staticColor = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateOverrideSslCheck(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET overrideSslCheck = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateSetHideZeroValues(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET hideZeroValues = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _updateShowNameTimeLogsDb(int value) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE appConfig SET showNameTimeLogs = $value',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
final updated = await updateConfigQuery(
|
||||
db: _dbInstance!,
|
||||
column: 'doNotRememberVersion',
|
||||
value: value
|
||||
);
|
||||
return updated;
|
||||
}
|
||||
|
||||
void saveFromDb(Database dbInstance, Map<String, dynamic> dbData) {
|
||||
|
|
|
@ -7,14 +7,15 @@ import 'package:adguard_home_manager/models/dns_info.dart';
|
|||
import 'package:adguard_home_manager/models/rewrite_rules.dart';
|
||||
import 'package:adguard_home_manager/models/filtering_status.dart';
|
||||
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||
import 'package:adguard_home_manager/models/update_available.dart';
|
||||
import 'package:adguard_home_manager/models/blocked_services.dart';
|
||||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:adguard_home_manager/models/server_status.dart';
|
||||
import 'package:adguard_home_manager/models/server.dart';
|
||||
import 'package:adguard_home_manager/models/update_available.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
|
||||
import 'package:adguard_home_manager/functions/conversions.dart';
|
||||
import 'package:adguard_home_manager/services/db/queries.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
||||
|
@ -249,7 +250,7 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<dynamic> createServer(Server server) async {
|
||||
final saved = await saveServerIntoDb(server);
|
||||
final saved = await saveServerQuery(_dbInstance!, server);
|
||||
if (saved == null) {
|
||||
if (server.defaultServer == true) {
|
||||
final defaultServer = await setDefaultServer(server);
|
||||
|
@ -274,7 +275,7 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<dynamic> setDefaultServer(Server server) async {
|
||||
final updated = await setDefaultServerDb(server.id);
|
||||
final updated = await setDefaultServerQuery(_dbInstance!, server.id);
|
||||
if (updated == null) {
|
||||
List<Server> newServers = _serversList.map((s) {
|
||||
if (s.id == server.id) {
|
||||
|
@ -296,7 +297,7 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<dynamic> editServer(Server server) async {
|
||||
final result = await editServerDb(server);
|
||||
final result = await editServerQuery(_dbInstance!, server);
|
||||
if (result == null) {
|
||||
List<Server> newServers = _serversList.map((s) {
|
||||
if (s.id == server.id) {
|
||||
|
@ -316,7 +317,7 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<bool> removeServer(Server server) async {
|
||||
final result = await removeFromDb(server.id);
|
||||
final result = await removeServerQuery(_dbInstance!, server.id);
|
||||
if (result == true) {
|
||||
_selectedServer = null;
|
||||
List<Server> newServers = _serversList.where((s) => s.id != server.id).toList();
|
||||
|
@ -472,63 +473,6 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Future<dynamic> saveServerIntoDb(Server server) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawInsert(
|
||||
'INSERT INTO servers (id, name, connectionMethod, domain, path, port, user, password, defaultServer, authToken, runningOnHa) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
|
||||
[server.id, server.name, server.connectionMethod, server.domain, server.path, server.port, server.user, server.password, server.defaultServer, server.authToken, convertFromBoolToInt(server.runningOnHa)]
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> editServerDb(Server server) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE servers SET name = ?, connectionMethod = ?, domain = ?, path = ?, port = ?, user = ?, password = ?, authToken = ?, runningOnHa = ? WHERE id = "${server.id}"',
|
||||
[server.name, server.connectionMethod, server.domain, server.path, server.port, server.user, server.password, server.authToken, server.runningOnHa]
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> removeFromDb(String id) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawDelete(
|
||||
'DELETE FROM servers WHERE id = "$id"',
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> setDefaultServerDb(String id) async {
|
||||
try {
|
||||
return await _dbInstance!.transaction((txn) async {
|
||||
await txn.rawUpdate(
|
||||
'UPDATE servers SET defaultServer = 0 WHERE defaultServer = 1',
|
||||
);
|
||||
await txn.rawUpdate(
|
||||
'UPDATE servers SET defaultServer = 1 WHERE id = "$id"',
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
void checkServerUpdatesAvailable(Server server) async {
|
||||
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||
final result = await checkServerUpdates(server: server);
|
||||
|
|
114
lib/services/db/queries.dart
Normal file
114
lib/services/db/queries.dart
Normal file
|
@ -0,0 +1,114 @@
|
|||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/conversions.dart';
|
||||
import 'package:adguard_home_manager/models/server.dart';
|
||||
|
||||
Future<dynamic> saveServerQuery(Database db, Server server) async {
|
||||
try {
|
||||
return await db.transaction((txn) async {
|
||||
await txn.insert(
|
||||
'servers',
|
||||
{
|
||||
'id': server.id,
|
||||
'name': server.name,
|
||||
'connectionMethod': server.connectionMethod,
|
||||
'domain': server.domain,
|
||||
'path': server.path,
|
||||
'port': server.port,
|
||||
'user': server.user,
|
||||
'password': server.password,
|
||||
'defaultServer': server.defaultServer,
|
||||
'authToken': server.authToken,
|
||||
'runningOnHa': convertFromBoolToInt(server.runningOnHa)
|
||||
}
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> editServerQuery(Database db, Server server) async {
|
||||
try {
|
||||
return await db.transaction((txn) async {
|
||||
await txn.update(
|
||||
'servers',
|
||||
{
|
||||
'id': server.id,
|
||||
'name': server.name,
|
||||
'connectionMethod': server.connectionMethod,
|
||||
'domain': server.domain,
|
||||
'path': server.path,
|
||||
'port': server.port,
|
||||
'user': server.user,
|
||||
'password': server.password,
|
||||
'defaultServer': server.defaultServer,
|
||||
'authToken': server.authToken,
|
||||
'runningOnHa': convertFromBoolToInt(server.runningOnHa)
|
||||
},
|
||||
where: 'id = ?',
|
||||
whereArgs: [server.id]
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Future<bool> removeServerQuery(Database db, String id) async {
|
||||
try {
|
||||
return await db.transaction((txn) async {
|
||||
await txn.delete(
|
||||
'servers',
|
||||
where: 'id = ?',
|
||||
whereArgs: [id]
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> setDefaultServerQuery(Database db, String id) async {
|
||||
try {
|
||||
return await db.transaction((txn) async {
|
||||
await txn.update(
|
||||
'servers',
|
||||
{'defaultServer': '0'},
|
||||
where: 'defaultServer = ?',
|
||||
whereArgs: [1]
|
||||
);
|
||||
await txn.update(
|
||||
'servers',
|
||||
{'defaultServer': '1'},
|
||||
where: 'id = ?',
|
||||
whereArgs: [id]
|
||||
);
|
||||
return null;
|
||||
});
|
||||
} catch (e) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> updateConfigQuery({
|
||||
required Database db,
|
||||
required String column,
|
||||
required dynamic value
|
||||
}) async {
|
||||
try {
|
||||
return await db.transaction((txn) async {
|
||||
await txn.update(
|
||||
'appConfig',
|
||||
{ column: value },
|
||||
);
|
||||
return true;
|
||||
});
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue