mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-21 17:24:18 +00:00
Extracted server status stuff to a separate provider
This commit is contained in:
parent
0271c704a7
commit
4a2d78e8cf
30 changed files with 585 additions and 405 deletions
13
lib/providers/clients_provider.dart
Normal file
13
lib/providers/clients_provider.dart
Normal file
|
@ -0,0 +1,13 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class ClientsProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
}
|
||||
}
|
||||
}
|
13
lib/providers/filters_provider.dart
Normal file
13
lib/providers/filters_provider.dart
Normal file
|
@ -0,0 +1,13 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class FiltersProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,19 @@
|
|||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/models/applied_filters.dart';
|
||||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:adguard_home_manager/models/logs.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class LogsProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
}
|
||||
}
|
||||
|
||||
int _loadStatus = 0;
|
||||
LogsData? _logsData;
|
||||
List<AutoClient>? _clients;
|
||||
|
|
|
@ -9,26 +9,29 @@ 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/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';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
|
||||
class ServersProvider with ChangeNotifier {
|
||||
StatusProvider? _statusProvider;
|
||||
|
||||
update(StatusProvider? statusProvider) {
|
||||
if (statusProvider != null) {
|
||||
_statusProvider = statusProvider;
|
||||
}
|
||||
}
|
||||
|
||||
Database? _dbInstance;
|
||||
|
||||
List<Server> _serversList = [];
|
||||
Server? _selectedServer;
|
||||
final ServerStatus _serverStatus = ServerStatus(
|
||||
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
|
||||
data: null
|
||||
); // serverStatus != null means server is connected
|
||||
List<String> _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled
|
||||
String? _serverVersion;
|
||||
|
||||
final Clients _clients = Clients(
|
||||
loadStatus: LoadStatus.loading,
|
||||
|
@ -78,14 +81,6 @@ class ServersProvider with ChangeNotifier {
|
|||
return _selectedServer;
|
||||
}
|
||||
|
||||
ServerStatus get serverStatus {
|
||||
return _serverStatus;
|
||||
}
|
||||
|
||||
List<String> get protectionsManagementProcess {
|
||||
return _protectionsManagementProcess;
|
||||
}
|
||||
|
||||
Clients get clients {
|
||||
return _clients;
|
||||
}
|
||||
|
@ -144,16 +139,6 @@ class ServersProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
void setServerStatusData(ServerStatusData data) {
|
||||
_serverStatus.data = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setServerStatusLoad(int status) {
|
||||
_serverStatus.loadStatus = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setClientsLoadStatus(LoadStatus status, bool notify) {
|
||||
_clients.loadStatus = status;
|
||||
if (notify == true) {
|
||||
|
@ -226,7 +211,7 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
void setFilteringProtectionStatus(bool status) {
|
||||
_serverStatus.data!.filteringEnabled = status;
|
||||
_statusProvider!.setFilteringStatus(status);
|
||||
_filtering.data!.enabled = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
@ -382,149 +367,6 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Future<dynamic> updateBlocking({
|
||||
required Server server,
|
||||
required String block,
|
||||
required bool newStatus,
|
||||
int? time
|
||||
}) async {
|
||||
switch (block) {
|
||||
case 'general':
|
||||
_protectionsManagementProcess.add('general');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateGeneralProtection(
|
||||
server: server,
|
||||
enable: newStatus,
|
||||
time: time
|
||||
);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.generalEnabled = newStatus;
|
||||
if (time != null) {
|
||||
_serverStatus.data!.timeGeneralDisabled = time;
|
||||
_serverStatus.data!.disabledUntil = generateTimeDeadline(time);
|
||||
}
|
||||
else {
|
||||
_serverStatus.data!.timeGeneralDisabled = 0;
|
||||
_serverStatus.data!.disabledUntil = null;
|
||||
}
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'general_legacy':
|
||||
_protectionsManagementProcess.add('general');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateGeneralProtectionLegacy(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.generalEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
|
||||
case 'filtering':
|
||||
_protectionsManagementProcess.add('filtering');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateFiltering(
|
||||
server: server,
|
||||
enable: newStatus,
|
||||
);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'filtering').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.filteringEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'safeSearch':
|
||||
_protectionsManagementProcess.add('safeSearch');
|
||||
notifyListeners();
|
||||
|
||||
final result = serverVersionIsAhead(
|
||||
currentVersion: serverStatus.data!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
? await updateSafeSearchSettings(server: server, body: { 'enabled': newStatus })
|
||||
: await updateSafeSearchLegacy(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeSearch').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.safeSearchEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'safeBrowsing':
|
||||
_protectionsManagementProcess.add('safeBrowsing');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateSafeBrowsing(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeBrowsing').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.safeBrowsingEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'parentalControl':
|
||||
_protectionsManagementProcess.add('parentalControl');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateParentalControl(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'parentalControl').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus.data!.parentalControlEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void checkServerUpdatesAvailable(Server server) async {
|
||||
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
|
||||
final result = await checkServerUpdates(server: server);
|
||||
|
@ -556,8 +398,26 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
void saveFromDb(List<Map<String, dynamic>>? data) async {
|
||||
Future<Map<String, dynamic>> initializateServer(Server server) async {
|
||||
_selectedServer = server;
|
||||
final serverStatus = await getServerStatus(server);
|
||||
if (serverStatus['result'] == 'success') {
|
||||
checkServerUpdatesAvailable(server); // Do not await
|
||||
return {
|
||||
"success": true,
|
||||
"serverData": serverStatus['data']
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
"success": false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>?> saveFromDb(List<Map<String, dynamic>>? data) async {
|
||||
if (data != null) {
|
||||
Server? defaultServer;
|
||||
for (var server in data) {
|
||||
final Server serverObj = Server(
|
||||
id: server['id'],
|
||||
|
@ -574,20 +434,23 @@ class ServersProvider with ChangeNotifier {
|
|||
);
|
||||
_serversList.add(serverObj);
|
||||
if (convertFromIntToBool(server['defaultServer']) == true) {
|
||||
_selectedServer = serverObj;
|
||||
_serverStatus.loadStatus = 0;
|
||||
final serverStatus = await getServerStatus(serverObj);
|
||||
if (serverStatus['result'] == 'success') {
|
||||
_serverStatus.data = serverStatus['data'];
|
||||
_serverStatus.loadStatus = 1;
|
||||
checkServerUpdatesAvailable(serverObj); // Do not await
|
||||
}
|
||||
else {
|
||||
_serverStatus.loadStatus = 2;
|
||||
}
|
||||
defaultServer = serverObj;
|
||||
}
|
||||
}
|
||||
|
||||
notifyListeners();
|
||||
|
||||
if (defaultServer != null) {
|
||||
final result = await initializateServer(defaultServer);
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
194
lib/providers/status_provider.dart
Normal file
194
lib/providers/status_provider.dart
Normal file
|
@ -0,0 +1,194 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/models/server_status.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
|
||||
import 'package:adguard_home_manager/models/server.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
||||
class StatusProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
}
|
||||
}
|
||||
|
||||
LoadStatus _loadStatus = LoadStatus.loading;
|
||||
ServerStatus? _serverStatus; // serverStatus != null means server is connected
|
||||
List<String> _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled
|
||||
|
||||
LoadStatus get loadStatus {
|
||||
return _loadStatus;
|
||||
}
|
||||
|
||||
ServerStatus? get serverStatus {
|
||||
return _serverStatus;
|
||||
}
|
||||
|
||||
List<String> get protectionsManagementProcess {
|
||||
return _protectionsManagementProcess;
|
||||
}
|
||||
|
||||
void setServerStatusData({
|
||||
required ServerStatus data,
|
||||
}) {
|
||||
_serverStatus = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setServerStatusLoad(LoadStatus status) {
|
||||
_loadStatus = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<dynamic> updateBlocking({
|
||||
required Server server,
|
||||
required String block,
|
||||
required bool newStatus,
|
||||
int? time
|
||||
}) async {
|
||||
switch (block) {
|
||||
case 'general':
|
||||
_protectionsManagementProcess.add('general');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateGeneralProtection(
|
||||
server: server,
|
||||
enable: newStatus,
|
||||
time: time
|
||||
);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.generalEnabled = newStatus;
|
||||
if (time != null) {
|
||||
_serverStatus!.timeGeneralDisabled = time;
|
||||
_serverStatus!.disabledUntil = generateTimeDeadline(time);
|
||||
}
|
||||
else {
|
||||
_serverStatus!.timeGeneralDisabled = 0;
|
||||
_serverStatus!.disabledUntil = null;
|
||||
}
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'general_legacy':
|
||||
_protectionsManagementProcess.add('general');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateGeneralProtectionLegacy(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.generalEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
|
||||
case 'filtering':
|
||||
_protectionsManagementProcess.add('filtering');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateFiltering(
|
||||
server: server,
|
||||
enable: newStatus,
|
||||
);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'filtering').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.filteringEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'safeSearch':
|
||||
_protectionsManagementProcess.add('safeSearch');
|
||||
notifyListeners();
|
||||
|
||||
final result = serverVersionIsAhead(
|
||||
currentVersion: serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
? await updateSafeSearchSettings(server: server, body: { 'enabled': newStatus })
|
||||
: await updateSafeSearchLegacy(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeSearch').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.safeSearchEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'safeBrowsing':
|
||||
_protectionsManagementProcess.add('safeBrowsing');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateSafeBrowsing(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeBrowsing').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.safeBrowsingEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
case 'parentalControl':
|
||||
_protectionsManagementProcess.add('parentalControl');
|
||||
notifyListeners();
|
||||
|
||||
final result = await updateParentalControl(server, newStatus);
|
||||
|
||||
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'parentalControl').toList();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
_serverStatus!.parentalControlEnabled = newStatus;
|
||||
notifyListeners();
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
notifyListeners();
|
||||
return result['log'];
|
||||
}
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void setFilteringStatus(bool status) {
|
||||
_serverStatus!.filteringEnabled = status;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue