mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-04 20:30:35 +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
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/models/filtering_status.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
@ -12,6 +13,7 @@ import 'package:adguard_home_manager/services/http_requests.dart';
|
|||
|
||||
Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, String newStatus) async {
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final statusProvider = Provider.of<StatusProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
|
||||
final ProcessModal processModal = ProcessModal(context: context);
|
||||
|
@ -20,7 +22,7 @@ Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, S
|
|||
final rules = await getFilteringRules(server: serversProvider.selectedServer!);
|
||||
|
||||
if (rules['result'] == 'success') {
|
||||
FilteringStatus oldStatus = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus oldStatus = statusProvider.serverStatus!.filteringStatus;
|
||||
List<String> newRules = rules['data'].userRules.where((d) => !d.contains(domain)).toList();
|
||||
if (newStatus == 'block') {
|
||||
newRules.add("||$domain^");
|
||||
|
@ -28,7 +30,7 @@ Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, S
|
|||
else if (newStatus == 'unblock') {
|
||||
newRules.add("@@||$domain^");
|
||||
}
|
||||
FilteringStatus newObj = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus;
|
||||
newObj.userRules = newRules;
|
||||
serversProvider.setFilteringStatus(newObj);
|
||||
|
||||
|
|
110
lib/main.dart
110
lib/main.dart
|
@ -17,14 +17,18 @@ 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/db/database.dart';
|
||||
import 'package:adguard_home_manager/constants/colors.dart';
|
||||
import 'package:adguard_home_manager/config/globals.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/config/theme.dart';
|
||||
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/colors.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/config/globals.dart';
|
||||
import 'package:adguard_home_manager/config/theme.dart';
|
||||
import 'package:adguard_home_manager/classes/http_override.dart';
|
||||
import 'package:adguard_home_manager/services/db/database.dart';
|
||||
|
||||
|
||||
void main() async {
|
||||
|
@ -43,6 +47,9 @@ void main() async {
|
|||
|
||||
AppConfigProvider appConfigProvider = AppConfigProvider();
|
||||
ServersProvider serversProvider = ServersProvider();
|
||||
StatusProvider statusProvider = StatusProvider();
|
||||
ClientsProvider clientsProvider = ClientsProvider();
|
||||
FiltersProvider filtersProvider = FiltersProvider();
|
||||
LogsProvider logsProvider = LogsProvider();
|
||||
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
|
@ -68,11 +75,68 @@ void main() async {
|
|||
|
||||
serversProvider.setDbInstance(dbData['dbInstance']);
|
||||
appConfigProvider.saveFromDb(dbData['dbInstance'], dbData['appConfig']);
|
||||
serversProvider.saveFromDb(dbData['servers']);
|
||||
final result = await serversProvider.saveFromDb(dbData['servers']);
|
||||
if (result != null) {
|
||||
if (result['success'] == true) {
|
||||
statusProvider.setServerStatusData(
|
||||
data: result['serverData'],
|
||||
);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
}
|
||||
else {
|
||||
statusProvider.setServerStatusLoad(LoadStatus.error);
|
||||
}
|
||||
}
|
||||
|
||||
PackageInfo appInfo = await PackageInfo.fromPlatform();
|
||||
appConfigProvider.setAppInfo(appInfo);
|
||||
|
||||
void startApp() => runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => serversProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => statusProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => clientsProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => logsProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => filtersProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => appConfigProvider)
|
||||
),
|
||||
ChangeNotifierProxyProvider<StatusProvider, ServersProvider>(
|
||||
create: (context) => serversProvider,
|
||||
update: (context, status, servers) => servers!..update(status),
|
||||
),
|
||||
ChangeNotifierProxyProvider<ServersProvider, StatusProvider>(
|
||||
create: (context) => statusProvider,
|
||||
update: (context, servers, status) => status!..update(servers),
|
||||
),
|
||||
ChangeNotifierProxyProvider<ServersProvider, ClientsProvider>(
|
||||
create: (context) => clientsProvider,
|
||||
update: (context, servers, clients) => clients!..update(servers),
|
||||
),
|
||||
ChangeNotifierProxyProvider<ServersProvider, LogsProvider>(
|
||||
create: (context) => logsProvider,
|
||||
update: (context, servers, logs) => logs!..update(servers),
|
||||
),
|
||||
ChangeNotifierProxyProvider<ServersProvider, FiltersProvider>(
|
||||
create: (context) => filtersProvider,
|
||||
update: (context, servers, filters) => filters!..update(servers),
|
||||
),
|
||||
],
|
||||
child: const Main(),
|
||||
)
|
||||
);
|
||||
|
||||
if (
|
||||
(
|
||||
kReleaseMode &&
|
||||
|
@ -87,41 +151,11 @@ void main() async {
|
|||
options.dsn = dotenv.env['SENTRY_DSN'];
|
||||
options.sendDefaultPii = false;
|
||||
},
|
||||
appRunner: () => runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => serversProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => appConfigProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => logsProvider)
|
||||
),
|
||||
],
|
||||
child: const Main(),
|
||||
)
|
||||
)
|
||||
appRunner: () => startApp()
|
||||
);
|
||||
}
|
||||
else {
|
||||
runApp(
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => serversProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => appConfigProvider)
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: ((context) => logsProvider)
|
||||
),
|
||||
],
|
||||
child: const Main(),
|
||||
)
|
||||
);
|
||||
startApp();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,15 +4,6 @@ import 'package:adguard_home_manager/models/dns_statistics.dart';
|
|||
import 'package:adguard_home_manager/models/filtering_status.dart';
|
||||
|
||||
class ServerStatus {
|
||||
int loadStatus;
|
||||
ServerStatusData? data;
|
||||
|
||||
ServerStatus({
|
||||
required this.loadStatus,
|
||||
this.data
|
||||
});
|
||||
}
|
||||
class ServerStatusData {
|
||||
final DnsStatistics stats;
|
||||
final List<Client> clients;
|
||||
final FilteringStatus filteringStatus;
|
||||
|
@ -31,7 +22,7 @@ class ServerStatusData {
|
|||
bool? safeSearchYandex;
|
||||
bool? safeSearchYoutube;
|
||||
|
||||
ServerStatusData({
|
||||
ServerStatus({
|
||||
required this.stats,
|
||||
required this.clients,
|
||||
required this.filteringStatus,
|
||||
|
@ -51,7 +42,7 @@ class ServerStatusData {
|
|||
required this.safeSearchYoutube
|
||||
});
|
||||
|
||||
factory ServerStatusData.fromJson(Map<String, dynamic> json) => ServerStatusData(
|
||||
factory ServerStatus.fromJson(Map<String, dynamic> json) => ServerStatus(
|
||||
stats: DnsStatistics.fromJson(json['stats']),
|
||||
clients: json["clients"] != null ? List<Client>.from(json["clients"].map((x) => Client.fromJson(x))) : [],
|
||||
generalEnabled: json['status']['protection_enabled'],
|
||||
|
|
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;
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ import 'package:adguard_home_manager/widgets/tab_content_list.dart';
|
|||
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -77,6 +78,7 @@ class _AddedListState extends State<AddedList> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -88,7 +90,7 @@ class _AddedListState extends State<AddedList> {
|
|||
final result = await postUpdateClient(server: serversProvider.selectedServer!, data: {
|
||||
'name': client.name,
|
||||
'data': serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == false
|
||||
|
@ -168,7 +170,7 @@ class _AddedListState extends State<AddedList> {
|
|||
context: context,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmEditClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
onDelete: deleteClient,
|
||||
client: client,
|
||||
dialog: true,
|
||||
|
@ -180,7 +182,7 @@ class _AddedListState extends State<AddedList> {
|
|||
fullscreenDialog: true,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmEditClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
onDelete: deleteClient,
|
||||
client: client,
|
||||
dialog: false,
|
||||
|
@ -240,7 +242,7 @@ class _AddedListState extends State<AddedList> {
|
|||
onLongPress: openOptionsModal,
|
||||
onEdit: openClientModal,
|
||||
splitView: widget.splitView,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
),
|
||||
noData: SizedBox(
|
||||
width: double.maxFinite,
|
||||
|
|
|
@ -11,6 +11,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
|||
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/models/safe_search.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
|
||||
|
@ -131,6 +132,7 @@ class _ClientScreenState extends State<ClientScreen> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
|
||||
void createClient() {
|
||||
final Client client = Client(
|
||||
|
@ -506,7 +508,7 @@ class _ClientScreenState extends State<ClientScreen> {
|
|||
),
|
||||
if (
|
||||
serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
|
@ -531,7 +533,7 @@ class _ClientScreenState extends State<ClientScreen> {
|
|||
),
|
||||
if (
|
||||
serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == false
|
||||
|
|
|
@ -14,6 +14,7 @@ import 'package:adguard_home_manager/models/clients.dart';
|
|||
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
||||
|
@ -24,6 +25,7 @@ class ClientsFab extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
|
@ -34,7 +36,7 @@ class ClientsFab extends StatelessWidget {
|
|||
final result = await postAddClient(
|
||||
server: serversProvider.selectedServer!,
|
||||
data: serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == false
|
||||
|
@ -73,7 +75,7 @@ class ClientsFab extends StatelessWidget {
|
|||
context: context,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmAddClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
dialog: true,
|
||||
)
|
||||
);
|
||||
|
@ -83,7 +85,7 @@ class ClientsFab extends StatelessWidget {
|
|||
fullscreenDialog: true,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmAddClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
dialog: false,
|
||||
)
|
||||
));
|
||||
|
|
|
@ -11,6 +11,7 @@ import 'package:adguard_home_manager/screens/clients/remove_client_modal.dart';
|
|||
import 'package:adguard_home_manager/screens/clients/client_screen.dart';
|
||||
import 'package:adguard_home_manager/screens/clients/options_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/widgets/section_label.dart';
|
||||
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
||||
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -19,7 +20,7 @@ import 'package:adguard_home_manager/functions/compare_versions.dart';
|
|||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:adguard_home_manager/widgets/section_label.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class SearchClients extends StatelessWidget {
|
||||
|
@ -99,6 +100,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -189,7 +191,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
|||
context: context,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmEditClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
onDelete: deleteClient,
|
||||
client: client,
|
||||
dialog: true,
|
||||
|
@ -201,7 +203,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
|||
fullscreenDialog: true,
|
||||
builder: (BuildContext context) => ClientScreen(
|
||||
onConfirm: confirmEditClient,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
onDelete: deleteClient,
|
||||
client: client,
|
||||
dialog: false,
|
||||
|
@ -356,7 +358,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
|||
Icons.search_rounded,
|
||||
size: 19,
|
||||
color: serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
|
|
|
@ -15,6 +15,7 @@ import 'package:adguard_home_manager/screens/filters/blocked_services_screen.dar
|
|||
import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
|
@ -83,6 +84,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -158,20 +160,20 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
void enableDisableFiltering() async {
|
||||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(
|
||||
serversProvider.serverStatus.data!.filteringEnabled == true
|
||||
statusProvider.serverStatus!.filteringEnabled == true
|
||||
? AppLocalizations.of(context)!.disableFiltering
|
||||
: AppLocalizations.of(context)!.enableFiltering
|
||||
);
|
||||
|
||||
final result = await updateFiltering(
|
||||
server: serversProvider.selectedServer!,
|
||||
enable: !serversProvider.serverStatus.data!.filteringEnabled
|
||||
enable: !statusProvider.serverStatus!.filteringEnabled
|
||||
);
|
||||
|
||||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setFilteringProtectionStatus(!serversProvider.serverStatus.data!.filteringEnabled);
|
||||
serversProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
|
|
@ -4,6 +4,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
|
||||
import 'package:adguard_home_manager/screens/servers/servers.dart';
|
||||
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/open_url.dart';
|
||||
import 'package:adguard_home_manager/models/server.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
@ -20,6 +22,7 @@ class HomeAppBar extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final Server? server = serversProvider.selectedServer;
|
||||
|
@ -38,14 +41,14 @@ class HomeAppBar extends StatelessWidget {
|
|||
centerTitle: false,
|
||||
forceElevated: innerBoxScrolled,
|
||||
leading: Icon(
|
||||
serversProvider.selectedServer != null && serversProvider.serverStatus.data != null
|
||||
? serversProvider.serverStatus.data!.generalEnabled == true
|
||||
serversProvider.selectedServer != null && statusProvider.serverStatus != null
|
||||
? statusProvider.serverStatus!.generalEnabled == true
|
||||
? Icons.gpp_good_rounded
|
||||
: Icons.gpp_bad_rounded
|
||||
: Icons.shield,
|
||||
size: 30,
|
||||
color: serversProvider.selectedServer != null && serversProvider.serverStatus.data != null
|
||||
? serversProvider.serverStatus.data!.generalEnabled == true
|
||||
color: serversProvider.selectedServer != null && statusProvider.serverStatus != null
|
||||
? statusProvider.serverStatus!.generalEnabled == true
|
||||
? appConfigProvider.useThemeColorForStatus
|
||||
? Theme.of(context).colorScheme.primary
|
||||
: Colors.green
|
||||
|
@ -95,7 +98,7 @@ class HomeAppBar extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
if (serversProvider.selectedServer != null && serversProvider.serverStatus.loadStatus == 1) PopupMenuItem(
|
||||
if (serversProvider.selectedServer != null && statusProvider.loadStatus == LoadStatus.loaded) PopupMenuItem(
|
||||
onTap: () => openUrl("${server!.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}"),
|
||||
child: Row(
|
||||
children: [
|
||||
|
|
|
@ -7,7 +7,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/widgets/combined_line_chart.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/number_format.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
||||
class CombinedChartData {
|
||||
|
@ -51,56 +51,56 @@ class CombinedHomeChart extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
if (serversProvider.serverStatus.data != null) {
|
||||
if (statusProvider.serverStatus != null) {
|
||||
final data = CombinedChartData(
|
||||
totalQueries: CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.dnsQueries,
|
||||
color: Colors.blue,
|
||||
data: serversProvider.serverStatus.data!.stats.dnsQueries
|
||||
data: statusProvider.serverStatus!.stats.dnsQueries
|
||||
),
|
||||
blockedFilters: appConfigProvider.hideZeroValues == true
|
||||
? removeZero(serversProvider.serverStatus.data!.stats.blockedFiltering) != null
|
||||
? removeZero(statusProvider.serverStatus!.stats.blockedFiltering) != null
|
||||
? CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.blockedFilters,
|
||||
color: Colors.red,
|
||||
data: serversProvider.serverStatus.data!.stats.blockedFiltering
|
||||
data: statusProvider.serverStatus!.stats.blockedFiltering
|
||||
)
|
||||
: null
|
||||
: CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.blockedFilters,
|
||||
color: Colors.red,
|
||||
data: serversProvider.serverStatus.data!.stats.blockedFiltering
|
||||
data: statusProvider.serverStatus!.stats.blockedFiltering
|
||||
) ,
|
||||
replacedSafeBrowsing: appConfigProvider.hideZeroValues == true
|
||||
? removeZero(serversProvider.serverStatus.data!.stats.replacedSafebrowsing) != null
|
||||
? removeZero(statusProvider.serverStatus!.stats.replacedSafebrowsing) != null
|
||||
? CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
|
||||
color: Colors.green,
|
||||
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing
|
||||
data: statusProvider.serverStatus!.stats.replacedSafebrowsing
|
||||
)
|
||||
: null
|
||||
: CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
|
||||
color: Colors.green,
|
||||
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing
|
||||
data: statusProvider.serverStatus!.stats.replacedSafebrowsing
|
||||
) ,
|
||||
replacedParental: appConfigProvider.hideZeroValues == true
|
||||
? removeZero(serversProvider.serverStatus.data!.stats.replacedParental) != null
|
||||
? removeZero(statusProvider.serverStatus!.stats.replacedParental) != null
|
||||
? CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.blockedAdultWebsites,
|
||||
color: Colors.orange,
|
||||
data: serversProvider.serverStatus.data!.stats.replacedParental
|
||||
data: statusProvider.serverStatus!.stats.replacedParental
|
||||
)
|
||||
: null
|
||||
: CombinedChartItem(
|
||||
label: AppLocalizations.of(context)!.blockedAdultWebsites,
|
||||
color: Colors.orange,
|
||||
data: serversProvider.serverStatus.data!.stats.replacedParental
|
||||
data: statusProvider.serverStatus!.stats.replacedParental
|
||||
) ,
|
||||
);
|
||||
|
||||
|
@ -184,29 +184,29 @@ class CombinedHomeChart extends StatelessWidget {
|
|||
legend(
|
||||
label: data.totalQueries.label,
|
||||
color: data.totalQueries.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.blockedFilters != null) legend(
|
||||
label: data.blockedFilters!.label,
|
||||
color: data.blockedFilters!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.replacedSafeBrowsing != null) legend(
|
||||
label: data.replacedSafeBrowsing!.label,
|
||||
color: data.replacedSafeBrowsing!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.replacedParental != null) legend(
|
||||
label: data.replacedParental!.label,
|
||||
color: data.replacedParental!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -247,29 +247,29 @@ class CombinedHomeChart extends StatelessWidget {
|
|||
legend(
|
||||
label: data.totalQueries.label,
|
||||
color: data.totalQueries.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.blockedFilters != null) legend(
|
||||
label: data.blockedFilters!.label,
|
||||
color: data.blockedFilters!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.replacedSafeBrowsing != null) legend(
|
||||
label: data.replacedSafeBrowsing!.label,
|
||||
color: data.replacedSafeBrowsing!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
if (data.replacedParental != null) legend(
|
||||
label: data.replacedParental!.label,
|
||||
color: data.replacedParental!.color,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
],
|
||||
|
|
|
@ -3,14 +3,15 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:adguard_home_manager/screens/home/management_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
||||
class HomeFab extends StatelessWidget {
|
||||
const HomeFab({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
|
@ -35,7 +36,7 @@ class HomeFab extends StatelessWidget {
|
|||
}
|
||||
}
|
||||
|
||||
return serversProvider.serverStatus.loadStatus == 1
|
||||
return statusProvider.loadStatus == LoadStatus.loaded
|
||||
? FloatingActionButton(
|
||||
onPressed: openManagementBottomSheet,
|
||||
child: const Icon(Icons.shield_rounded),
|
||||
|
|
|
@ -15,6 +15,8 @@ import 'package:adguard_home_manager/screens/home/top_items.dart';
|
|||
import 'package:adguard_home_manager/screens/home/chart.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/number_format.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
|
@ -55,6 +57,7 @@ class _HomeState extends State<Home> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -109,7 +112,7 @@ class _HomeState extends State<Home> {
|
|||
|
||||
List<Widget> listItems() {
|
||||
return [
|
||||
ServerStatus(serverStatus: serversProvider.serverStatus.data!),
|
||||
ServerStatusWidget(serverStatus: statusProvider.serverStatus!),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: Divider(
|
||||
|
@ -124,40 +127,40 @@ class _HomeState extends State<Home> {
|
|||
FractionallySizedBox(
|
||||
widthFactor: width > 700 ? 0.5 : 1,
|
||||
child: HomeChart(
|
||||
data: serversProvider.serverStatus.data!.stats.dnsQueries,
|
||||
data: statusProvider.serverStatus!.stats.dnsQueries,
|
||||
label: AppLocalizations.of(context)!.dnsQueries,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
|
||||
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
|
||||
color: Colors.blue,
|
||||
),
|
||||
),
|
||||
FractionallySizedBox(
|
||||
widthFactor: width > 700 ? 0.5 : 1,
|
||||
child: HomeChart(
|
||||
data: serversProvider.serverStatus.data!.stats.blockedFiltering,
|
||||
data: statusProvider.serverStatus!.stats.blockedFiltering,
|
||||
label: AppLocalizations.of(context)!.blockedFilters,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
color: Colors.red,
|
||||
),
|
||||
),
|
||||
FractionallySizedBox(
|
||||
widthFactor: width > 700 ? 0.5 : 1,
|
||||
child: HomeChart(
|
||||
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing,
|
||||
data: statusProvider.serverStatus!.stats.replacedSafebrowsing,
|
||||
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
color: Colors.green,
|
||||
),
|
||||
),
|
||||
FractionallySizedBox(
|
||||
widthFactor: width > 700 ? 0.5 : 1,
|
||||
child: HomeChart(
|
||||
data: serversProvider.serverStatus.data!.stats.replacedParental,
|
||||
data: statusProvider.serverStatus!.stats.replacedParental,
|
||||
label: AppLocalizations.of(context)!.blockedAdultWebsites,
|
||||
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
|
||||
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
|
||||
color: Colors.orange,
|
||||
),
|
||||
),
|
||||
|
@ -172,7 +175,7 @@ class _HomeState extends State<Home> {
|
|||
if (width <= 700) ...[
|
||||
TopItems(
|
||||
label: AppLocalizations.of(context)!.topQueriedDomains,
|
||||
data: serversProvider.serverStatus.data!.stats.topQueriedDomains,
|
||||
data: statusProvider.serverStatus!.stats.topQueriedDomains,
|
||||
type: 'topQueriedDomains',
|
||||
),
|
||||
Padding(
|
||||
|
@ -187,7 +190,7 @@ class _HomeState extends State<Home> {
|
|||
|
||||
TopItems(
|
||||
label: AppLocalizations.of(context)!.topBlockedDomains,
|
||||
data: serversProvider.serverStatus.data!.stats.topBlockedDomains,
|
||||
data: statusProvider.serverStatus!.stats.topBlockedDomains,
|
||||
type: 'topBlockedDomains',
|
||||
),
|
||||
Padding(
|
||||
|
@ -201,7 +204,7 @@ class _HomeState extends State<Home> {
|
|||
|
||||
TopItems(
|
||||
label: AppLocalizations.of(context)!.topClients,
|
||||
data: serversProvider.serverStatus.data!.stats.topClients,
|
||||
data: statusProvider.serverStatus!.stats.topClients,
|
||||
type: 'topClients',
|
||||
clients: true,
|
||||
),
|
||||
|
@ -219,7 +222,7 @@ class _HomeState extends State<Home> {
|
|||
),
|
||||
child: TopItems(
|
||||
label: AppLocalizations.of(context)!.topQueriedDomains,
|
||||
data: serversProvider.serverStatus.data!.stats.topQueriedDomains,
|
||||
data: statusProvider.serverStatus!.stats.topQueriedDomains,
|
||||
type: 'topQueriedDomains',
|
||||
),
|
||||
),
|
||||
|
@ -232,7 +235,7 @@ class _HomeState extends State<Home> {
|
|||
),
|
||||
child: TopItems(
|
||||
label: AppLocalizations.of(context)!.topBlockedDomains,
|
||||
data: serversProvider.serverStatus.data!.stats.topBlockedDomains,
|
||||
data: statusProvider.serverStatus!.stats.topBlockedDomains,
|
||||
type: 'topBlockedDomains',
|
||||
),
|
||||
),
|
||||
|
@ -245,7 +248,7 @@ class _HomeState extends State<Home> {
|
|||
),
|
||||
child: TopItems(
|
||||
label: AppLocalizations.of(context)!.topClients,
|
||||
data: serversProvider.serverStatus.data!.stats.topClients,
|
||||
data: statusProvider.serverStatus!.stats.topClients,
|
||||
type: 'topClients',
|
||||
),
|
||||
),
|
||||
|
@ -279,7 +282,9 @@ class _HomeState extends State<Home> {
|
|||
onRefresh: () async {
|
||||
final result = await getServerStatus(serversProvider.selectedServer!);
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(result['data']);
|
||||
statusProvider.setServerStatusData(
|
||||
data: result['data']
|
||||
);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result['log']);
|
||||
|
@ -295,13 +300,13 @@ class _HomeState extends State<Home> {
|
|||
SliverOverlapInjector(
|
||||
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
|
||||
),
|
||||
if (serversProvider.serverStatus.loadStatus == 0) SliverFillRemaining(
|
||||
if (statusProvider.loadStatus == LoadStatus.loading) SliverFillRemaining(
|
||||
child: loading(),
|
||||
),
|
||||
if (serversProvider.serverStatus.loadStatus == 1) SliverList.list(
|
||||
if (statusProvider.loadStatus == LoadStatus.loaded) SliverList.list(
|
||||
children: listItems()
|
||||
),
|
||||
if (serversProvider.serverStatus.loadStatus == 2) SliverFillRemaining(
|
||||
if (statusProvider.loadStatus == LoadStatus.error) SliverFillRemaining(
|
||||
child: loadError(),
|
||||
),
|
||||
],
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -74,6 +75,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
void startTimer(DateTime deadline) {
|
||||
|
@ -92,7 +94,9 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
});
|
||||
final result = await getServerStatus(serversProvider.selectedServer!);
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(result['data']);
|
||||
statusProvider.setServerStatusData(
|
||||
data: result['data']
|
||||
);
|
||||
}
|
||||
} else {
|
||||
setState(() {
|
||||
|
@ -104,16 +108,16 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
}
|
||||
|
||||
if (
|
||||
serversProvider.serverStatus.data != null &&
|
||||
serversProvider.serverStatus.data!.disabledUntil != null &&
|
||||
serversProvider.serverStatus.data!.disabledUntil != currentDeadline
|
||||
statusProvider.serverStatus != null &&
|
||||
statusProvider.serverStatus!.disabledUntil != null &&
|
||||
statusProvider.serverStatus!.disabledUntil != currentDeadline
|
||||
) {
|
||||
startTimer(serversProvider.serverStatus.data!.disabledUntil!);
|
||||
startTimer(statusProvider.serverStatus!.disabledUntil!);
|
||||
}
|
||||
|
||||
if (
|
||||
serversProvider.serverStatus.data != null &&
|
||||
serversProvider.serverStatus.data!.generalEnabled == true
|
||||
statusProvider.serverStatus != null &&
|
||||
statusProvider.serverStatus!.generalEnabled == true
|
||||
) {
|
||||
setState(() {
|
||||
start = 0;
|
||||
|
@ -128,7 +132,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
required String filter,
|
||||
int? time
|
||||
}) async {
|
||||
final result = await serversProvider.updateBlocking(
|
||||
final result = await statusProvider.updateBlocking(
|
||||
server: serversProvider.selectedServer!,
|
||||
block: filter,
|
||||
newStatus: value,
|
||||
|
@ -164,7 +168,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
child: Icon(
|
||||
Icons.keyboard_arrow_down_rounded,
|
||||
size: 26,
|
||||
color: serversProvider.serverStatus.data!.generalEnabled == true
|
||||
color: statusProvider.serverStatus!.generalEnabled == true
|
||||
? Theme.of(context).colorScheme.onSurfaceVariant
|
||||
: Colors.grey,
|
||||
),
|
||||
|
@ -180,7 +184,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
fontSize: 18,
|
||||
),
|
||||
),
|
||||
if (serversProvider.serverStatus.data!.timeGeneralDisabled > 0) ...[
|
||||
if (statusProvider.serverStatus!.timeGeneralDisabled > 0) ...[
|
||||
const SizedBox(height: 2),
|
||||
if (currentDeadline != null) Text(
|
||||
"${AppLocalizations.of(context)!.remainingTime}: ${generateRemainingTimeString(currentDeadline!.difference(DateTime.now()))}"
|
||||
|
@ -191,8 +195,8 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
],
|
||||
),
|
||||
Switch(
|
||||
value: serversProvider.serverStatus.data!.generalEnabled,
|
||||
onChanged: serversProvider.protectionsManagementProcess.contains('general') == false
|
||||
value: statusProvider.serverStatus!.generalEnabled,
|
||||
onChanged: statusProvider.protectionsManagementProcess.contains('general') == false
|
||||
? (value) {
|
||||
if (value == false && expandableController.expanded == true && legacyMode == false) {
|
||||
expandableController.toggle();
|
||||
|
@ -216,35 +220,35 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
children: [
|
||||
ActionChip(
|
||||
label: Text(AppLocalizations.of(context)!.seconds(30)),
|
||||
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
|
||||
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
|
||||
? () => disableWithCountdown(29000)
|
||||
: null,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ActionChip(
|
||||
label: Text(AppLocalizations.of(context)!.minute(1)),
|
||||
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
|
||||
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
|
||||
? () => disableWithCountdown(59000)
|
||||
: null,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ActionChip(
|
||||
label: Text(AppLocalizations.of(context)!.minutes(10)),
|
||||
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
|
||||
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
|
||||
? () => disableWithCountdown(599000)
|
||||
: null,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ActionChip(
|
||||
label: Text(AppLocalizations.of(context)!.hour(1)),
|
||||
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
|
||||
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
|
||||
? () => disableWithCountdown(3599000)
|
||||
: null,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
ActionChip(
|
||||
label: Text(AppLocalizations.of(context)!.hours(24)),
|
||||
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
|
||||
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
|
||||
? () => disableWithCountdown(86399000)
|
||||
: null,
|
||||
),
|
||||
|
@ -256,7 +260,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 24),
|
||||
child: serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
|
@ -266,7 +270,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
color: Colors.transparent,
|
||||
borderRadius: BorderRadius.circular(28),
|
||||
child: InkWell(
|
||||
onTap: serversProvider.serverStatus.data!.generalEnabled == true && !serversProvider.protectionsManagementProcess.contains('general')
|
||||
onTap: statusProvider.serverStatus!.generalEnabled == true && !statusProvider.protectionsManagementProcess.contains('general')
|
||||
? () => expandableController.toggle()
|
||||
: null,
|
||||
borderRadius: BorderRadius.circular(28),
|
||||
|
@ -301,9 +305,9 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
color: Colors.transparent,
|
||||
borderRadius: BorderRadius.circular(28),
|
||||
child: InkWell(
|
||||
onTap: serversProvider.protectionsManagementProcess.contains('general') == false
|
||||
onTap: statusProvider.protectionsManagementProcess.contains('general') == false
|
||||
? () => updateBlocking(
|
||||
value: !serversProvider.serverStatus.data!.generalEnabled,
|
||||
value: !statusProvider.serverStatus!.generalEnabled,
|
||||
filter: 'general_legacy'
|
||||
) : null,
|
||||
borderRadius: BorderRadius.circular(28),
|
||||
|
@ -408,30 +412,30 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
|
|||
smallSwitch(
|
||||
AppLocalizations.of(context)!.ruleFiltering,
|
||||
Icons.filter_list_rounded,
|
||||
serversProvider.serverStatus.data!.filteringEnabled,
|
||||
statusProvider.serverStatus!.filteringEnabled,
|
||||
(value) => updateBlocking(value: value, filter: 'filtering'),
|
||||
serversProvider.protectionsManagementProcess.contains('filtering')
|
||||
statusProvider.protectionsManagementProcess.contains('filtering')
|
||||
),
|
||||
smallSwitch(
|
||||
AppLocalizations.of(context)!.safeBrowsing,
|
||||
Icons.vpn_lock_rounded,
|
||||
serversProvider.serverStatus.data!.safeBrowsingEnabled,
|
||||
statusProvider.serverStatus!.safeBrowsingEnabled,
|
||||
(value) => updateBlocking(value: value, filter: 'safeBrowsing'),
|
||||
serversProvider.protectionsManagementProcess.contains('safeBrowsing')
|
||||
statusProvider.protectionsManagementProcess.contains('safeBrowsing')
|
||||
),
|
||||
smallSwitch(
|
||||
AppLocalizations.of(context)!.parentalFiltering,
|
||||
Icons.block,
|
||||
serversProvider.serverStatus.data!.parentalControlEnabled,
|
||||
statusProvider.serverStatus!.parentalControlEnabled,
|
||||
(value) => updateBlocking(value: value, filter: 'parentalControl'),
|
||||
serversProvider.protectionsManagementProcess.contains('parentalControl')
|
||||
statusProvider.protectionsManagementProcess.contains('parentalControl')
|
||||
),
|
||||
smallSwitch(
|
||||
AppLocalizations.of(context)!.safeSearch,
|
||||
Icons.search_rounded,
|
||||
serversProvider.serverStatus.data!.safeSearchEnabled,
|
||||
statusProvider.serverStatus!.safeSearchEnabled,
|
||||
(value) => updateBlocking(value: value, filter: 'safeSearch'),
|
||||
serversProvider.protectionsManagementProcess.contains('safeSearch')
|
||||
statusProvider.protectionsManagementProcess.contains('safeSearch')
|
||||
),
|
||||
];
|
||||
}
|
||||
|
|
|
@ -5,10 +5,10 @@ import 'package:adguard_home_manager/screens/home/status_box.dart';
|
|||
|
||||
import 'package:adguard_home_manager/models/server_status.dart';
|
||||
|
||||
class ServerStatus extends StatelessWidget {
|
||||
final ServerStatusData serverStatus;
|
||||
class ServerStatusWidget extends StatelessWidget {
|
||||
final ServerStatus serverStatus;
|
||||
|
||||
const ServerStatus({
|
||||
const ServerStatusWidget({
|
||||
Key? key,
|
||||
required this.serverStatus,
|
||||
}) : super(key: key);
|
||||
|
|
|
@ -13,6 +13,7 @@ import 'package:adguard_home_manager/widgets/options_modal.dart';
|
|||
import 'package:adguard_home_manager/screens/top_items/top_items.dart';
|
||||
|
||||
import 'package:adguard_home_manager/models/applied_filters.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/models/menu_option.dart';
|
||||
import 'package:adguard_home_manager/providers/logs_provider.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
|
@ -37,6 +38,7 @@ class TopItems extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final logsProvider = Provider.of<LogsProvider>(context);
|
||||
|
||||
|
@ -61,7 +63,7 @@ class TopItems extends StatelessWidget {
|
|||
final rules = await getFilteringRules(server: serversProvider.selectedServer!);
|
||||
|
||||
if (rules['result'] == 'success') {
|
||||
FilteringStatus oldStatus = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus oldStatus = statusProvider.serverStatus!.filteringStatus;
|
||||
|
||||
List<String> newRules = rules['data'].userRules.where((d) => !d.contains(domain)).toList();
|
||||
if (newStatus == 'block') {
|
||||
|
@ -70,7 +72,7 @@ class TopItems extends StatelessWidget {
|
|||
else if (newStatus == 'unblock') {
|
||||
newRules.add("@@||$domain^");
|
||||
}
|
||||
FilteringStatus newObj = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus;
|
||||
newObj.userRules = newRules;
|
||||
serversProvider.setFilteringStatus(newObj);
|
||||
|
||||
|
@ -154,7 +156,7 @@ class TopItems extends StatelessWidget {
|
|||
String? name;
|
||||
if (clients != null && clients == true) {
|
||||
try {
|
||||
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(item.keys.toList()[0])).name;
|
||||
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(item.keys.toList()[0])).name;
|
||||
} catch (e) {
|
||||
// ---- //
|
||||
}
|
||||
|
@ -241,13 +243,13 @@ class TopItems extends StatelessWidget {
|
|||
List<Map<String, dynamic>> generateData() {
|
||||
switch (type) {
|
||||
case 'topQueriedDomains':
|
||||
return serversProvider.serverStatus.data!.stats.topQueriedDomains;
|
||||
return statusProvider.serverStatus!.stats.topQueriedDomains;
|
||||
|
||||
case 'topBlockedDomains':
|
||||
return serversProvider.serverStatus.data!.stats.topBlockedDomains;
|
||||
return statusProvider.serverStatus!.stats.topBlockedDomains;
|
||||
|
||||
case 'topClients':
|
||||
return serversProvider.serverStatus.data!.stats.topClients;
|
||||
return statusProvider.serverStatus!.stats.topClients;
|
||||
|
||||
default:
|
||||
return [];
|
||||
|
|
|
@ -15,6 +15,7 @@ import 'package:adguard_home_manager/functions/snackbar.dart';
|
|||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/models/applied_filters.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.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/services/http_requests.dart';
|
||||
|
@ -190,6 +191,7 @@ class _LogsWidgetState extends State<LogsWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final logsProvider = Provider.of<LogsProvider>(context);
|
||||
|
||||
|
@ -200,7 +202,7 @@ class _LogsWidgetState extends State<LogsWidget> {
|
|||
processModal.open(AppLocalizations.of(context)!.updatingSettings);
|
||||
|
||||
final result = serverVersionIsAhead(
|
||||
currentVersion: widget.serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true
|
||||
|
@ -442,7 +444,7 @@ class _LogsWidgetState extends State<LogsWidget> {
|
|||
onConfirm: updateConfig,
|
||||
onClear: clearQueries,
|
||||
dialog: true,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
),
|
||||
barrierDismissible: false
|
||||
)
|
||||
|
@ -454,7 +456,7 @@ class _LogsWidgetState extends State<LogsWidget> {
|
|||
onConfirm: updateConfig,
|
||||
onClear: clearQueries,
|
||||
dialog: false,
|
||||
serverVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
serverVersion: statusProvider.serverStatus!.serverVersion,
|
||||
),
|
||||
backgroundColor: Colors.transparent,
|
||||
isScrollControlled: true
|
||||
|
|
|
@ -7,6 +7,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/widgets/custom_checkbox_list_tile.dart';
|
||||
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/models/server_status.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -19,10 +21,12 @@ class SafeSearchSettingsScreen extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProviuder = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
return SafeSearchSettingsScreenWidget(
|
||||
serversProvider: serversProvider,
|
||||
statusProvider: statusProviuder,
|
||||
appConfigProvider: appConfigProvider,
|
||||
);
|
||||
}
|
||||
|
@ -30,11 +34,13 @@ class SafeSearchSettingsScreen extends StatelessWidget {
|
|||
|
||||
class SafeSearchSettingsScreenWidget extends StatefulWidget {
|
||||
final ServersProvider serversProvider;
|
||||
final StatusProvider statusProvider;
|
||||
final AppConfigProvider appConfigProvider;
|
||||
|
||||
const SafeSearchSettingsScreenWidget({
|
||||
Key? key,
|
||||
required this.serversProvider,
|
||||
required this.statusProvider,
|
||||
required this.appConfigProvider
|
||||
}) : super(key: key);
|
||||
|
||||
|
@ -56,8 +62,10 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
final result = await getServerStatus(widget.serversProvider.selectedServer!);
|
||||
if (mounted) {
|
||||
if (result['result'] == 'success') {
|
||||
widget.serversProvider.setServerStatusData(result['data']);
|
||||
widget.serversProvider.setServerStatusLoad(1);
|
||||
widget.statusProvider.setServerStatusData(
|
||||
data: result['data']
|
||||
);
|
||||
widget.statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
setState(() {
|
||||
generalEnabled = result['data'].safeSearchEnabled;
|
||||
bingEnabled = result['data'].safeSeachBing;
|
||||
|
@ -70,7 +78,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
}
|
||||
else {
|
||||
widget.appConfigProvider.addLog(result['log']);
|
||||
widget.serversProvider.setServerStatusLoad(2);
|
||||
widget.statusProvider.setServerStatusLoad(LoadStatus.error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -78,17 +86,17 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
|
||||
@override
|
||||
void initState() {
|
||||
if (widget.serversProvider.serverStatus.loadStatus == 0) {
|
||||
if (widget.statusProvider.loadStatus == LoadStatus.loading) {
|
||||
requestSafeSearchSettings();
|
||||
}
|
||||
else if (widget.serversProvider.serverStatus.loadStatus == 1) {
|
||||
generalEnabled = widget.serversProvider.serverStatus.data!.safeSearchEnabled;
|
||||
bingEnabled = widget.serversProvider.serverStatus.data!.safeSeachBing!;
|
||||
duckduckgoEnabled = widget.serversProvider.serverStatus.data!.safeSearchDuckduckgo!;
|
||||
googleEnabled = widget.serversProvider.serverStatus.data!.safeSearchGoogle!;
|
||||
pixabayEnabled = widget.serversProvider.serverStatus.data!.safeSearchPixabay!;
|
||||
yandexEnabled = widget.serversProvider.serverStatus.data!.safeSearchYandex!;
|
||||
youtubeEnabled = widget.serversProvider.serverStatus.data!.safeSearchYoutube!;
|
||||
else if (widget.statusProvider.loadStatus == LoadStatus.loaded) {
|
||||
generalEnabled = widget.statusProvider.serverStatus!.safeSearchEnabled;
|
||||
bingEnabled = widget.statusProvider.serverStatus!.safeSeachBing!;
|
||||
duckduckgoEnabled = widget.statusProvider.serverStatus!.safeSearchDuckduckgo!;
|
||||
googleEnabled = widget.statusProvider.serverStatus!.safeSearchGoogle!;
|
||||
pixabayEnabled = widget.statusProvider.serverStatus!.safeSearchPixabay!;
|
||||
yandexEnabled = widget.statusProvider.serverStatus!.safeSearchYandex!;
|
||||
youtubeEnabled = widget.statusProvider.serverStatus!.safeSearchYoutube!;
|
||||
}
|
||||
super.initState();
|
||||
}
|
||||
|
@ -96,6 +104,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
void saveConfig() async {
|
||||
|
@ -118,7 +127,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
ServerStatusData data = serversProvider.serverStatus.data!;
|
||||
ServerStatus data = statusProvider.serverStatus!;
|
||||
data.safeSearchEnabled = generalEnabled;
|
||||
data.safeSeachBing = bingEnabled;
|
||||
data.safeSearchDuckduckgo = duckduckgoEnabled;
|
||||
|
@ -127,7 +136,9 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
data.safeSearchYandex = yandexEnabled;
|
||||
data.safeSearchYoutube = youtubeEnabled;
|
||||
|
||||
serversProvider.setServerStatusData(data);
|
||||
statusProvider.setServerStatusData(
|
||||
data: data
|
||||
);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -148,8 +159,8 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
}
|
||||
|
||||
Widget body() {
|
||||
switch (serversProvider.serverStatus.loadStatus) {
|
||||
case 0:
|
||||
switch (statusProvider.loadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
|
@ -170,7 +181,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
),
|
||||
);
|
||||
|
||||
case 1:
|
||||
case LoadStatus.loaded:
|
||||
return RefreshIndicator(
|
||||
onRefresh: requestSafeSearchSettings,
|
||||
child: ListView(
|
||||
|
@ -274,7 +285,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
),
|
||||
);
|
||||
|
||||
case 2:
|
||||
case LoadStatus.error:
|
||||
return SizedBox(
|
||||
width: double.maxFinite,
|
||||
child: Column(
|
||||
|
@ -311,7 +322,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
|
|||
centerTitle: false,
|
||||
actions: [
|
||||
IconButton(
|
||||
onPressed: serversProvider.serverStatus.loadStatus == 1
|
||||
onPressed: statusProvider.loadStatus == LoadStatus.loaded
|
||||
? () => saveConfig()
|
||||
: null,
|
||||
icon: const Icon(Icons.save_rounded),
|
||||
|
|
|
@ -27,6 +27,7 @@ import 'package:adguard_home_manager/constants/strings.dart';
|
|||
import 'package:adguard_home_manager/functions/open_url.dart';
|
||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||
import 'package:adguard_home_manager/constants/urls.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
||||
|
@ -67,8 +68,9 @@ class SettingsWidget extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
|
@ -129,10 +131,10 @@ class SettingsWidget extends StatelessWidget {
|
|||
],
|
||||
body: ListView(
|
||||
children: [
|
||||
if (serversProvider.selectedServer != null && serversProvider.serverStatus.data != null) ...[
|
||||
if (serversProvider.selectedServer != null && statusProvider.serverStatus != null) ...[
|
||||
SectionLabel(label: AppLocalizations.of(context)!.serverSettings),
|
||||
if (serverVersionIsAhead(
|
||||
currentVersion: serversProvider.serverStatus.data!.serverVersion,
|
||||
currentVersion: statusProvider.serverStatus!.serverVersion,
|
||||
referenceVersion: 'v0.107.28',
|
||||
referenceVersionBeta: 'v0.108.0-b.33'
|
||||
) == true) settingsTile(
|
||||
|
@ -217,7 +219,7 @@ class SettingsWidget extends StatelessWidget {
|
|||
icon: Icons.storage_rounded,
|
||||
title: AppLocalizations.of(context)!.servers,
|
||||
subtitle: serversProvider.selectedServer != null
|
||||
? serversProvider.serverStatus.data != null
|
||||
? statusProvider.serverStatus != null
|
||||
? "${AppLocalizations.of(context)!.connectedTo} ${serversProvider.selectedServer!.name}"
|
||||
: "${AppLocalizations.of(context)!.selectedServer} ${serversProvider.selectedServer!.name}"
|
||||
: AppLocalizations.of(context)!.noServerSelected,
|
||||
|
|
|
@ -12,6 +12,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
|||
|
||||
import 'package:adguard_home_manager/models/applied_filters.dart';
|
||||
import 'package:adguard_home_manager/providers/logs_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/functions/number_format.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
@ -58,6 +59,7 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final logsProvider = Provider.of<LogsProvider>(context);
|
||||
|
||||
|
@ -132,7 +134,9 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
|
|||
onRefresh: () async {
|
||||
final result = await getServerStatus(serversProvider.selectedServer!);
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(result['data']);
|
||||
statusProvider.setServerStatusData(
|
||||
data: result['data']
|
||||
);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result['log']);
|
||||
|
@ -150,7 +154,7 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
|
|||
String? name;
|
||||
if (widget.isClient != null && widget.isClient == true) {
|
||||
try {
|
||||
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
|
||||
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
|
||||
} catch (e) {
|
||||
// ---- //
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
|||
import 'package:adguard_home_manager/models/applied_filters.dart';
|
||||
import 'package:adguard_home_manager/providers/logs_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/number_format.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class TopItemsModal extends StatefulWidget {
|
||||
final String type;
|
||||
|
@ -55,7 +55,7 @@ class _TopItemsModalState extends State<TopItemsModal> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
final logsProvider = Provider.of<LogsProvider>(context);
|
||||
|
||||
|
@ -122,7 +122,7 @@ class _TopItemsModalState extends State<TopItemsModal> {
|
|||
String? name;
|
||||
if (widget.isClient != null && widget.isClient == true) {
|
||||
try {
|
||||
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
|
||||
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
|
||||
} catch (e) {
|
||||
// ---- //
|
||||
}
|
||||
|
|
|
@ -335,7 +335,7 @@ Future getServerStatus(Server server) async {
|
|||
};
|
||||
return {
|
||||
'result': 'success',
|
||||
'data': ServerStatusData.fromJson(mappedData)
|
||||
'data': ServerStatus.fromJson(mappedData)
|
||||
};
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -7,6 +7,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/base64.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/models/app_log.dart';
|
||||
|
@ -217,6 +219,7 @@ class _AddServerModalState extends State<AddServerModal> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final statusProvider = Provider.of<StatusProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
|
||||
final mediaQuery = MediaQuery.of(context);
|
||||
|
@ -257,13 +260,15 @@ class _AddServerModalState extends State<AddServerModal> {
|
|||
}
|
||||
final serverCreated = await serversProvider.createServer(serverObj);
|
||||
if (serverCreated == null) {
|
||||
serversProvider.setServerStatusLoad(0);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loading);
|
||||
|
||||
final serverStatus = await getServerStatus(serverObj);
|
||||
|
||||
if (serverStatus['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(serverStatus['data']);
|
||||
serversProvider.setServerStatusLoad(1);
|
||||
statusProvider.setServerStatusData(
|
||||
data: serverStatus['data']
|
||||
);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
if (serverStatus['data'].serverVersion.contains('a') || serverStatus['data'].serverVersion.contains('b')) {
|
||||
Navigator.pop(context);
|
||||
widget.onUnsupportedVersion(serverStatus['data'].serverVersion);
|
||||
|
@ -274,7 +279,7 @@ class _AddServerModalState extends State<AddServerModal> {
|
|||
}
|
||||
else {
|
||||
appConfigProvider.addLog(serverStatus['log']);
|
||||
serversProvider.setServerStatusLoad(2);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.error);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
|||
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/models/filtering_status.dart';
|
||||
import 'package:adguard_home_manager/providers/status_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/services/http_requests.dart';
|
||||
|
@ -37,6 +38,7 @@ class DomainOptions extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
void blockUnblock(String domain, String newStatus) async {
|
||||
|
@ -46,7 +48,7 @@ class DomainOptions extends StatelessWidget {
|
|||
final rules = await getFilteringRules(server: serversProvider.selectedServer!);
|
||||
|
||||
if (rules['result'] == 'success') {
|
||||
FilteringStatus oldStatus = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus oldStatus = statusProvider.serverStatus!.filteringStatus;
|
||||
|
||||
List<String> newRules = rules['data'].userRules.where((d) => !d.contains(domain)).toList();
|
||||
if (newStatus == 'block') {
|
||||
|
@ -55,7 +57,7 @@ class DomainOptions extends StatelessWidget {
|
|||
else if (newStatus == 'unblock') {
|
||||
newRules.add("@@||$domain^");
|
||||
}
|
||||
FilteringStatus newObj = serversProvider.serverStatus.data!.filteringStatus;
|
||||
FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus;
|
||||
newObj.userRules = newRules;
|
||||
serversProvider.setFilteringStatus(newObj);
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@ import 'package:adguard_home_manager/widgets/servers_list/delete_modal.dart';
|
|||
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/models/app_log.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -69,6 +71,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -134,16 +137,18 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
if (result['result'] == 'success') {
|
||||
serversProvider.setSelectedServer(server);
|
||||
|
||||
serversProvider.setServerStatusLoad(0);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loading);
|
||||
final serverStatus = await getServerStatus(server);
|
||||
if (serverStatus['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(serverStatus['data']);
|
||||
statusProvider.setServerStatusData(
|
||||
data: serverStatus['data']
|
||||
);
|
||||
serversProvider.checkServerUpdatesAvailable(server);
|
||||
serversProvider.setServerStatusLoad(1);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(serverStatus['log']);
|
||||
serversProvider.setServerStatusLoad(2);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.error);
|
||||
}
|
||||
|
||||
process.close();
|
||||
|
@ -192,7 +197,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
Icon(
|
||||
Icons.storage_rounded,
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
|
||||
? serversProvider.serverStatus.data != null
|
||||
? statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange
|
||||
: null,
|
||||
|
@ -225,7 +230,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
return Icon(
|
||||
Icons.storage_rounded,
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
|
||||
? serversProvider.serverStatus.data != null
|
||||
? statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange
|
||||
: null,
|
||||
|
@ -344,7 +349,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
margin: const EdgeInsets.only(right: 12),
|
||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
|
||||
decoration: BoxDecoration(
|
||||
color: serversProvider.serverStatus.data != null
|
||||
color: statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange,
|
||||
borderRadius: BorderRadius.circular(30)
|
||||
|
@ -352,14 +357,14 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
|
|||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
serversProvider.serverStatus.data != null
|
||||
statusProvider.serverStatus != null
|
||||
? Icons.check
|
||||
: Icons.warning,
|
||||
color: Colors.white,
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
serversProvider.serverStatus.data != null
|
||||
statusProvider.serverStatus != null
|
||||
? AppLocalizations.of(context)!.connected
|
||||
: AppLocalizations.of(context)!.selectedDisconnected,
|
||||
style: const TextStyle(
|
||||
|
|
|
@ -10,6 +10,8 @@ import 'package:adguard_home_manager/widgets/servers_list/delete_modal.dart';
|
|||
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
import 'package:adguard_home_manager/models/app_log.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
@ -36,6 +38,7 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -101,16 +104,18 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
if (result['result'] == 'success') {
|
||||
serversProvider.setSelectedServer(server);
|
||||
|
||||
serversProvider.setServerStatusLoad(0);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loading);
|
||||
final serverStatus = await getServerStatus(server);
|
||||
if (serverStatus['result'] == 'success') {
|
||||
serversProvider.setServerStatusData(serverStatus['data']);
|
||||
statusProvider.setServerStatusData(
|
||||
data: serverStatus['data']
|
||||
);
|
||||
serversProvider.checkServerUpdatesAvailable(server);
|
||||
serversProvider.setServerStatusLoad(1);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.loaded);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(serverStatus['log']);
|
||||
serversProvider.setServerStatusLoad(2);
|
||||
statusProvider.setServerStatusLoad(LoadStatus.error);
|
||||
}
|
||||
|
||||
process.close();
|
||||
|
@ -159,7 +164,7 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
Icon(
|
||||
Icons.storage_rounded,
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
|
||||
? serversProvider.serverStatus.data != null
|
||||
? statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange
|
||||
: null,
|
||||
|
@ -192,7 +197,7 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
return Icon(
|
||||
Icons.storage_rounded,
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
|
||||
? serversProvider.serverStatus.data != null
|
||||
? statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange
|
||||
: null,
|
||||
|
@ -305,13 +310,13 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
),
|
||||
SizedBox(
|
||||
child: serversProvider.selectedServer != null &&
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null &&
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null &&
|
||||
serversProvider.selectedServer?.id == server.id
|
||||
? Container(
|
||||
margin: const EdgeInsets.only(right: 12),
|
||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
|
||||
decoration: BoxDecoration(
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
|
||||
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
|
||||
? Colors.green
|
||||
: Colors.orange,
|
||||
borderRadius: BorderRadius.circular(30)
|
||||
|
@ -319,14 +324,14 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
|
|||
child: Row(
|
||||
children: [
|
||||
Icon(
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
|
||||
? Icons.check
|
||||
: Icons.warning,
|
||||
color: Colors.white,
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Text(
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
|
||||
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
|
||||
? AppLocalizations.of(context)!.connected
|
||||
: AppLocalizations.of(context)!.selectedDisconnected,
|
||||
style: const TextStyle(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue