Changed queries and added macOS support

This commit is contained in:
Juan Gilsanz Polo 2023-04-29 00:24:30 +02:00
parent 6ba9eecf8e
commit e53f4f5972
40 changed files with 1680 additions and 214 deletions

View file

@ -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'];
}
}
}
}

View file

@ -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();

View file

@ -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) {

View file

@ -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);

View 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;
}
}