From 04b78685887e57a8cf20e2d22c26a422e110d1f8 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Wed, 24 May 2023 14:29:14 +0200 Subject: [PATCH] Changed filtering status to status provider --- lib/functions/block_unblock_domain.dart | 4 +- lib/providers/servers_provider.dart | 16 +--- lib/providers/status_provider.dart | 16 +++- lib/screens/home/top_items.dart | 4 +- lib/screens/logs/log_details_screen.dart | 16 ++-- lib/screens/logs/logs.dart | 102 +++++++++-------------- lib/widgets/domain_options.dart | 4 +- 7 files changed, 72 insertions(+), 90 deletions(-) diff --git a/lib/functions/block_unblock_domain.dart b/lib/functions/block_unblock_domain.dart index 5b92659..0049564 100644 --- a/lib/functions/block_unblock_domain.dart +++ b/lib/functions/block_unblock_domain.dart @@ -32,7 +32,7 @@ Future> blockUnblock(BuildContext context, String domain, S } FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus; newObj.userRules = newRules; - serversProvider.setFilteringStatus(newObj); + statusProvider.setFilteringStatus(newObj); final result = await postFilteringRules(server: serversProvider.selectedServer!, data: {'rules': newRules}); @@ -46,7 +46,7 @@ Future> blockUnblock(BuildContext context, String domain, S } else { appConfigProvider.addLog(result['log']); - serversProvider.setFilteringStatus(oldStatus); + statusProvider.setFilteringStatus(oldStatus); return { 'success': false, 'message': AppLocalizations.of(context)!.userFilteringRulesNotUpdated diff --git a/lib/providers/servers_provider.dart b/lib/providers/servers_provider.dart index 771bbaf..6a8b391 100644 --- a/lib/providers/servers_provider.dart +++ b/lib/providers/servers_provider.dart @@ -5,10 +5,7 @@ import 'package:adguard_home_manager/models/filtering.dart'; import 'package:adguard_home_manager/models/dhcp.dart'; import 'package:adguard_home_manager/models/dns_info.dart'; import 'package:adguard_home_manager/models/rewrite_rules.dart'; -import 'package:adguard_home_manager/models/filtering_status.dart'; -import 'package:adguard_home_manager/models/clients_allowed_blocked.dart'; import 'package:adguard_home_manager/models/blocked_services.dart'; -import 'package:adguard_home_manager/models/clients.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'; @@ -62,8 +59,6 @@ class ServersProvider with ChangeNotifier { data: null, ); - FilteringStatus? _filteringStatus; - List get serversList { return _serversList; } @@ -72,10 +67,6 @@ class ServersProvider with ChangeNotifier { return _selectedServer; } - FilteringStatus? get filteringStatus { - return _filteringStatus; - } - Filtering get filtering { return _filtering; } @@ -114,11 +105,6 @@ class ServersProvider with ChangeNotifier { notifyListeners(); } - void setFilteringStatus(FilteringStatus status) { - _filteringStatus = status; - notifyListeners(); - } - void setFilteringData(FilteringData data) { _filtering.data = data; notifyListeners(); @@ -132,7 +118,7 @@ class ServersProvider with ChangeNotifier { } void setFilteringProtectionStatus(bool status) { - _statusProvider!.setFilteringStatus(status); + _statusProvider!.setFilteringEnabledStatus(status); _filtering.data!.enabled = status; notifyListeners(); } diff --git a/lib/providers/status_provider.dart b/lib/providers/status_provider.dart index 26bdfe2..43d3ee4 100644 --- a/lib/providers/status_provider.dart +++ b/lib/providers/status_provider.dart @@ -1,3 +1,4 @@ +import 'package:adguard_home_manager/models/filtering_status.dart'; import 'package:flutter/material.dart'; import 'package:adguard_home_manager/models/server_status.dart'; @@ -18,9 +19,13 @@ class StatusProvider with ChangeNotifier { } LoadStatus _loadStatus = LoadStatus.loading; + ServerStatus? _serverStatus; // serverStatus != null means server is connected + List _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled + FilteringStatus? _filteringStatus; + LoadStatus get loadStatus { return _loadStatus; } @@ -33,6 +38,10 @@ class StatusProvider with ChangeNotifier { return _protectionsManagementProcess; } + FilteringStatus? get filteringStatus { + return _filteringStatus; + } + void setServerStatusData({ required ServerStatus data, }) { @@ -45,6 +54,11 @@ class StatusProvider with ChangeNotifier { notifyListeners(); } + void setFilteringStatus(FilteringStatus status) { + _filteringStatus = status; + notifyListeners(); + } + Future updateBlocking({ required Server server, required String block, @@ -188,7 +202,7 @@ class StatusProvider with ChangeNotifier { } } - void setFilteringStatus(bool status) { + void setFilteringEnabledStatus(bool status) { _serverStatus!.filteringEnabled = status; } } \ No newline at end of file diff --git a/lib/screens/home/top_items.dart b/lib/screens/home/top_items.dart index 04f8851..6356b7a 100644 --- a/lib/screens/home/top_items.dart +++ b/lib/screens/home/top_items.dart @@ -74,7 +74,7 @@ class TopItems extends StatelessWidget { } FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus; newObj.userRules = newRules; - serversProvider.setFilteringStatus(newObj); + statusProvider.setFilteringStatus(newObj); final result = await postFilteringRules(server: serversProvider.selectedServer!, data: {'rules': newRules}); @@ -90,7 +90,7 @@ class TopItems extends StatelessWidget { } else { appConfigProvider.addLog(result['log']); - serversProvider.setFilteringStatus(oldStatus); + statusProvider.setFilteringStatus(oldStatus); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.userFilteringRulesNotUpdated), diff --git a/lib/screens/logs/log_details_screen.dart b/lib/screens/logs/log_details_screen.dart index 1dafc64..1f6c100 100644 --- a/lib/screens/logs/log_details_screen.dart +++ b/lib/screens/logs/log_details_screen.dart @@ -10,6 +10,7 @@ import 'package:adguard_home_manager/screens/logs/log_list_tile.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/functions/get_filtered_status.dart'; +import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/models/logs.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/functions/format_time.dart'; @@ -31,11 +32,12 @@ class LogDetailsScreen extends StatelessWidget { Widget build(BuildContext context) { final serversProvider = Provider.of(context); final appConfigProvider = Provider.of(context); + final statusProvider = Provider.of(context); Filter? getList(int id) { try { - return serversProvider.filteringStatus!.filters.firstWhere((filter) => filter.id == id, orElse: () { - return serversProvider.filteringStatus!.whitelistFilters.firstWhere((filter) => filter.id == id); + return statusProvider.filteringStatus!.filters.firstWhere((filter) => filter.id == id, orElse: () { + return statusProvider.filteringStatus!.whitelistFilters.firstWhere((filter) => filter.id == id); }); } catch (_) { return null; @@ -60,7 +62,7 @@ class LogDetailsScreen extends StatelessWidget { final rules = await getFilteringRules(server: serversProvider.selectedServer!); if (rules['result'] == 'success') { - FilteringStatus oldStatus = serversProvider.filteringStatus!; + FilteringStatus oldStatus = statusProvider.filteringStatus!; List newRules = rules['data'].userRules.where((domain) => !domain.contains(log.question.name)).toList(); if (newStatus == 'block') { @@ -69,9 +71,9 @@ class LogDetailsScreen extends StatelessWidget { else if (newStatus == 'unblock') { newRules.add("@@||${log.question.name}^"); } - FilteringStatus newObj = serversProvider.filteringStatus!; + FilteringStatus newObj = statusProvider.filteringStatus!; newObj.userRules = newRules; - serversProvider.setFilteringStatus(newObj); + statusProvider.setFilteringStatus(newObj); final result = await postFilteringRules(server: serversProvider.selectedServer!, data: {'rules': newRules}); @@ -87,7 +89,7 @@ class LogDetailsScreen extends StatelessWidget { } else { appConfigProvider.addLog(result['log']); - serversProvider.setFilteringStatus(oldStatus); + statusProvider.setFilteringStatus(oldStatus); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.userFilteringRulesNotUpdated), @@ -298,7 +300,7 @@ class LogDetailsScreen extends StatelessWidget { centerTitle: false, title: Text(AppLocalizations.of(context)!.logDetails), actions: [ - if (serversProvider.filteringStatus != null) IconButton( + if (statusProvider.filteringStatus != null) IconButton( onPressed: () => blockUnblock(log, getFilteredStatus(context, appConfigProvider, log.reason, true)['filtered'] == true ? 'unblock' : 'block'), icon: Icon( getFilteredStatus(context, appConfigProvider, log.reason, true)['filtered'] == true diff --git a/lib/screens/logs/logs.dart b/lib/screens/logs/logs.dart index 7a6afd6..b70e7b7 100644 --- a/lib/screens/logs/logs.dart +++ b/lib/screens/logs/logs.dart @@ -22,46 +22,14 @@ import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/models/logs.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; -class Logs extends StatelessWidget { +class Logs extends StatefulWidget { const Logs({Key? key}) : super(key: key); @override - Widget build(BuildContext context) { - final serversProvider = Provider.of(context); - final appConfigProvider = Provider.of(context); - final logsProvider = Provider.of(context); - - return LogsWidget( - serversProvider: serversProvider, - appConfigProvider: appConfigProvider, - logsProvider: logsProvider, - selectedResultStatus: logsProvider.appliedFilters.selectedResultStatus, - searchText: logsProvider.appliedFilters.searchText, - ); - } + State createState() => _LogsState(); } -class LogsWidget extends StatefulWidget { - final ServersProvider serversProvider; - final AppConfigProvider appConfigProvider; - final LogsProvider logsProvider; - final String selectedResultStatus; - final String? searchText; - - const LogsWidget({ - Key? key, - required this.serversProvider, - required this.appConfigProvider, - required this.logsProvider, - required this.selectedResultStatus, - required this.searchText, - }) : super(key: key); - - @override - State createState() => _LogsWidgetState(); -} - -class _LogsWidgetState extends State { +class _LogsState extends State { late ScrollController scrollController; bool isLoadingMore = false; @@ -76,20 +44,24 @@ class _LogsWidgetState extends State { String? responseStatus, String? searchText, }) async { - int offst = inOffset ?? widget.logsProvider.offset; + final logsProvider = Provider.of(context, listen: false); + final appConfigProvider = Provider.of(context, listen: false); + final serversProvider = Provider.of(context, listen: false); - String resStatus = responseStatus ?? widget.selectedResultStatus; - String? search = searchText ?? widget.searchText; + int offst = inOffset ?? logsProvider.offset; + + String resStatus = responseStatus ?? logsProvider.selectedResultStatus; + String? search = searchText ?? logsProvider.searchText; if (loadingMore != null && loadingMore == true) { setState(() => isLoadingMore = true); } final result = await getLogs( - server: widget.serversProvider.selectedServer!, - count: widget.logsProvider.logsQuantity, + server: serversProvider.selectedServer!, + count: logsProvider.logsQuantity, offset: offst, - olderThan: widget.logsProvider.logsOlderThan, + olderThan: logsProvider.logsOlderThan, responseStatus: resStatus, search: search ); @@ -100,43 +72,47 @@ class _LogsWidgetState extends State { if (mounted) { if (result['result'] == 'success') { - widget.logsProvider.setOffset(inOffset != null ? inOffset+widget.logsProvider.logsQuantity : widget.logsProvider.offset+widget.logsProvider.logsQuantity); - if (loadingMore != null && loadingMore == true && widget.logsProvider.logsData != null) { + logsProvider.setOffset(inOffset != null ? inOffset+logsProvider.logsQuantity : logsProvider.offset+logsProvider.logsQuantity); + if (loadingMore != null && loadingMore == true && logsProvider.logsData != null) { LogsData newLogsData = result['data']; - newLogsData.data = [...widget.logsProvider.logsData!.data, ...result['data'].data]; - if (widget.logsProvider.appliedFilters.clients != null) { + newLogsData.data = [...logsProvider.logsData!.data, ...result['data'].data]; + if (logsProvider.appliedFilters.clients != null) { newLogsData.data = newLogsData.data.where( - (item) => widget.logsProvider.appliedFilters.clients!.contains(item.client) + (item) => logsProvider.appliedFilters.clients!.contains(item.client) ).toList(); } - widget.logsProvider.setLogsData(newLogsData); + logsProvider.setLogsData(newLogsData); } else { LogsData newLogsData = result['data']; - if (widget.logsProvider.appliedFilters.clients != null) { + if (logsProvider.appliedFilters.clients != null) { newLogsData.data = newLogsData.data.where( - (item) => widget.logsProvider.appliedFilters.clients!.contains(item.client) + (item) => logsProvider.appliedFilters.clients!.contains(item.client) ).toList(); } - widget.logsProvider.setLogsData(newLogsData); + logsProvider.setLogsData(newLogsData); } - widget.logsProvider.setLoadStatus(1); + logsProvider.setLoadStatus(1); } else { - widget.logsProvider.setLoadStatus(2); - widget.appConfigProvider.addLog(result['log']); + logsProvider.setLoadStatus(2); + appConfigProvider.addLog(result['log']); } } } void fetchFilteringRules() async { - final result = await getFilteringRules(server: widget.serversProvider.selectedServer!); + final appConfigProvider = Provider.of(context, listen: false); + final serversProvider = Provider.of(context, listen: false); + final statusProvider = Provider.of(context, listen: false); + + final result = await getFilteringRules(server: serversProvider.selectedServer!); if (mounted) { if (result['result'] == 'success') { - widget.serversProvider.setFilteringStatus(result['data']); + statusProvider.setFilteringStatus(result['data']); } else { - widget.appConfigProvider.addLog(result['log']); + appConfigProvider.addLog(result['log']); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.couldntGetFilteringStatus), @@ -148,15 +124,19 @@ class _LogsWidgetState extends State { } Future fetchClients() async { - final result = await getClients(widget.serversProvider.selectedServer!); + final logsProvider = Provider.of(context, listen: false); + final appConfigProvider = Provider.of(context, listen: false); + final serversProvider = Provider.of(context, listen: false); + + final result = await getClients(serversProvider.selectedServer!); if (mounted) { if (result['result'] == 'success') { - widget.logsProvider.setClientsLoadStatus(1); - widget.logsProvider.setClients(result['data'].autoClientsData); + logsProvider.setClientsLoadStatus(1); + logsProvider.setClients(result['data'].autoClients); } else { - widget.logsProvider.setClientsLoadStatus(2); - widget.appConfigProvider.addLog(result['log']); + logsProvider.setClientsLoadStatus(2); + appConfigProvider.addLog(result['log']); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.couldntGetFilteringStatus), diff --git a/lib/widgets/domain_options.dart b/lib/widgets/domain_options.dart index 5637e9d..415a8c3 100644 --- a/lib/widgets/domain_options.dart +++ b/lib/widgets/domain_options.dart @@ -59,7 +59,7 @@ class DomainOptions extends StatelessWidget { } FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus; newObj.userRules = newRules; - serversProvider.setFilteringStatus(newObj); + statusProvider.setFilteringStatus(newObj); final result = await postFilteringRules(server: serversProvider.selectedServer!, data: {'rules': newRules}); @@ -75,7 +75,7 @@ class DomainOptions extends StatelessWidget { } else { appConfigProvider.addLog(result['log']); - serversProvider.setFilteringStatus(oldStatus); + statusProvider.setFilteringStatus(oldStatus); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(AppLocalizations.of(context)!.userFilteringRulesNotUpdated),