mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-05-04 20:30:35 +00:00
Moved filtering to separate provider
This commit is contained in:
parent
04b7868588
commit
19ac14e49e
18 changed files with 240 additions and 356 deletions
|
@ -49,7 +49,7 @@ void main() async {
|
|||
ServersProvider serversProvider = ServersProvider();
|
||||
StatusProvider statusProvider = StatusProvider();
|
||||
ClientsProvider clientsProvider = ClientsProvider();
|
||||
FiltersProvider filtersProvider = FiltersProvider();
|
||||
FilteringProvider filtersProvider = FilteringProvider();
|
||||
LogsProvider logsProvider = LogsProvider();
|
||||
|
||||
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
|
||||
|
@ -112,25 +112,9 @@ void main() async {
|
|||
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>(
|
||||
ChangeNotifierProxyProvider<StatusProvider, FilteringProvider>(
|
||||
create: (context) => filtersProvider,
|
||||
update: (context, servers, filters) => filters!..update(servers),
|
||||
update: (context, status, filtering) => filtering!..updateStatus(status),
|
||||
),
|
||||
],
|
||||
child: const Main(),
|
||||
|
|
|
@ -11,12 +11,10 @@ class BlockedServicesFromApi {
|
|||
}
|
||||
|
||||
class BlockedServices {
|
||||
int loadStatus = 0;
|
||||
List<BlockedService>? services;
|
||||
List<BlockedService> services;
|
||||
|
||||
BlockedServices({
|
||||
this.loadStatus = 0,
|
||||
this.services
|
||||
required this.services
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,22 +1,4 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
||||
FilteringData filteringFromJson(String str) => FilteringData.fromJson(json.decode(str));
|
||||
|
||||
String filteringToJson(FilteringData data) => json.encode(data.toJson());
|
||||
|
||||
class Filtering {
|
||||
LoadStatus loadStatus = LoadStatus.loading;
|
||||
FilteringData? data;
|
||||
|
||||
Filtering({
|
||||
required this.loadStatus,
|
||||
this.data
|
||||
});
|
||||
}
|
||||
|
||||
class FilteringData {
|
||||
final List<Filter> filters;
|
||||
final List<Filter> whitelistFilters;
|
||||
List<String> userRules;
|
||||
|
@ -24,7 +6,7 @@ class FilteringData {
|
|||
int interval;
|
||||
bool enabled;
|
||||
|
||||
FilteringData({
|
||||
Filtering({
|
||||
required this.filters,
|
||||
required this.whitelistFilters,
|
||||
required this.userRules,
|
||||
|
@ -33,7 +15,7 @@ class FilteringData {
|
|||
required this.enabled,
|
||||
});
|
||||
|
||||
factory FilteringData.fromJson(Map<String, dynamic> json) => FilteringData(
|
||||
factory Filtering.fromJson(Map<String, dynamic> json) => Filtering(
|
||||
filters: json["filters"] != null ? List<Filter>.from(json["filters"].map((x) => Filter.fromJson(x))) : [],
|
||||
whitelistFilters: json["whitelist_filters"] != null ? List<Filter>.from(json["whitelist_filters"].map((x) => Filter.fromJson(x))) : [],
|
||||
userRules: json["user_rules"] != null ? List<String>.from(json["user_rules"].map((x) => x)).where((i) => i != '').toList() : [],
|
||||
|
|
|
@ -2,18 +2,9 @@ import 'package:flutter/material.dart';
|
|||
|
||||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
||||
class ClientsProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
}
|
||||
}
|
||||
|
||||
LoadStatus _loadStatus = LoadStatus.loading;
|
||||
Clients? _clients;
|
||||
String? _searchTermClients;
|
||||
|
|
|
@ -1,13 +1,81 @@
|
|||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/models/blocked_services.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||
|
||||
class FiltersProvider with ChangeNotifier {
|
||||
ServersProvider? _serversProvider;
|
||||
class FilteringProvider with ChangeNotifier {
|
||||
StatusProvider? _statusProvider;
|
||||
|
||||
update(ServersProvider? serversProvider) {
|
||||
if (serversProvider != null) {
|
||||
_serversProvider = serversProvider;
|
||||
updateStatus(StatusProvider? statusProvider) {
|
||||
if (statusProvider != null) {
|
||||
_statusProvider = statusProvider;
|
||||
}
|
||||
}
|
||||
|
||||
LoadStatus _loadStatus = LoadStatus.loading;
|
||||
Filtering? _filtering;
|
||||
LoadStatus _blockedServicesLoadStatus = LoadStatus.loading;
|
||||
BlockedServices? _blockedServicesList;
|
||||
|
||||
LoadStatus get loadStatus {
|
||||
return _loadStatus;
|
||||
}
|
||||
|
||||
Filtering? get filtering {
|
||||
return _filtering;
|
||||
}
|
||||
|
||||
LoadStatus get blockedServicesLoadStatus {
|
||||
return _blockedServicesLoadStatus;
|
||||
}
|
||||
|
||||
BlockedServices? get blockedServices {
|
||||
return _blockedServicesList;
|
||||
}
|
||||
|
||||
void setFilteringData(Filtering data) {
|
||||
_filtering = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFilteringLoadStatus(LoadStatus loadStatus, bool notify) {
|
||||
_loadStatus = loadStatus;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setFilteringProtectionStatus(bool status) {
|
||||
_statusProvider!.setFilteringEnabledStatus(status);
|
||||
_filtering!.enabled = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFiltersUpdateFrequency(int frequency) {
|
||||
if (_filtering != null) {
|
||||
_filtering!.interval = frequency;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setBlockedServices(List<String> blockedServices) {
|
||||
if (_filtering != null) {
|
||||
_filtering!.blockedServices = blockedServices;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setBlockedServiceListData(List<BlockedService> data) {
|
||||
_blockedServicesList = BlockedServices(services: data);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setBlockedServicesListLoadStatus(LoadStatus status, bool notify) {
|
||||
_blockedServicesLoadStatus = status;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,17 +3,8 @@ 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;
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:sqflite/sqflite.dart';
|
||||
|
||||
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/blocked_services.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';
|
||||
|
@ -13,27 +11,13 @@ 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 Filtering _filtering = Filtering(
|
||||
loadStatus: LoadStatus.loading,
|
||||
data: null
|
||||
);
|
||||
|
||||
final DhcpModel _dhcp = DhcpModel(
|
||||
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
|
||||
data: null
|
||||
|
@ -49,11 +33,6 @@ class ServersProvider with ChangeNotifier {
|
|||
data: null
|
||||
);
|
||||
|
||||
final BlockedServices _blockedServicesList = BlockedServices(
|
||||
loadStatus: 0,
|
||||
services: null
|
||||
);
|
||||
|
||||
final UpdateAvailable _updateAvailable = UpdateAvailable(
|
||||
loadStatus: LoadStatus.loading,
|
||||
data: null,
|
||||
|
@ -67,10 +46,6 @@ class ServersProvider with ChangeNotifier {
|
|||
return _selectedServer;
|
||||
}
|
||||
|
||||
Filtering get filtering {
|
||||
return _filtering;
|
||||
}
|
||||
|
||||
DhcpModel get dhcp {
|
||||
return _dhcp;
|
||||
}
|
||||
|
@ -83,10 +58,6 @@ class ServersProvider with ChangeNotifier {
|
|||
return _dnsInfo;
|
||||
}
|
||||
|
||||
BlockedServices get blockedServicesList {
|
||||
return _blockedServicesList;
|
||||
}
|
||||
|
||||
UpdateAvailable get updateAvailable {
|
||||
return _updateAvailable;
|
||||
}
|
||||
|
@ -105,34 +76,6 @@ class ServersProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFilteringData(FilteringData data) {
|
||||
_filtering.data = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFilteringLoadStatus(LoadStatus loadStatus, bool notify) {
|
||||
_filtering.loadStatus = loadStatus;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setFilteringProtectionStatus(bool status) {
|
||||
_statusProvider!.setFilteringEnabledStatus(status);
|
||||
_filtering.data!.enabled = status;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setFiltersUpdateFrequency(int frequency) {
|
||||
_filtering.data!.interval = frequency;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setBlockedServices(List<String> blockedServices) {
|
||||
_filtering.data!.blockedServices = blockedServices;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setDhcpData(DhcpData data) {
|
||||
_dhcp.data = data;
|
||||
notifyListeners();
|
||||
|
@ -169,18 +112,6 @@ class ServersProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
void setBlockedServiceListData(List<BlockedService> data) {
|
||||
_blockedServicesList.services = data;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setBlockedServicesListLoadStatus(int status, bool notify) {
|
||||
_blockedServicesList.loadStatus = status;
|
||||
if (notify == true) {
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void setUpdateAvailableLoadStatus(LoadStatus status, bool notify) {
|
||||
_updateAvailable.loadStatus = status;
|
||||
if (notify == true) {
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import 'package:adguard_home_manager/models/filtering_status.dart';
|
||||
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/models/filtering_status.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';
|
||||
|
@ -10,20 +9,9 @@ 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
|
||||
|
||||
FilteringStatus? _filteringStatus;
|
||||
|
||||
LoadStatus get loadStatus {
|
||||
|
|
|
@ -3,10 +3,12 @@ import 'package:provider/provider.dart';
|
|||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
|
||||
class ServicesModal extends StatelessWidget {
|
||||
class ServicesModal extends StatefulWidget {
|
||||
final List<String> blockedServices;
|
||||
final void Function(List<String>) onConfirm;
|
||||
|
||||
|
@ -17,55 +19,33 @@ class ServicesModal extends StatelessWidget {
|
|||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
return ServicesModalWidget(
|
||||
blockedServices: blockedServices,
|
||||
onConfirm: onConfirm,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
);
|
||||
}
|
||||
State<ServicesModal> createState() => _ServicesModalStateWidget();
|
||||
}
|
||||
|
||||
class ServicesModalWidget extends StatefulWidget {
|
||||
final ServersProvider serversProvider;
|
||||
final AppConfigProvider appConfigProvider;
|
||||
final List<String> blockedServices;
|
||||
final void Function(List<String>) onConfirm;
|
||||
|
||||
const ServicesModalWidget({
|
||||
Key? key,
|
||||
required this.blockedServices,
|
||||
required this.onConfirm,
|
||||
required this.serversProvider,
|
||||
required this.appConfigProvider
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<ServicesModalWidget> createState() => _ServicesModalStateWidget();
|
||||
}
|
||||
|
||||
class _ServicesModalStateWidget extends State<ServicesModalWidget> {
|
||||
class _ServicesModalStateWidget extends State<ServicesModal> {
|
||||
List<String> blockedServices = [];
|
||||
|
||||
Future loadBlockedServices() async {
|
||||
final result = await getBlockedServices(server: widget.serversProvider.selectedServer!);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
|
||||
final result = await getBlockedServices(server: serversProvider.selectedServer!);
|
||||
if (result['result'] == 'success') {
|
||||
widget.serversProvider.setBlockedServicesListLoadStatus(1, true);
|
||||
widget.serversProvider.setBlockedServiceListData(result['data']);
|
||||
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setBlockedServiceListData(result['data']);
|
||||
}
|
||||
else {
|
||||
widget.serversProvider.setBlockedServicesListLoadStatus(2, true);
|
||||
widget.appConfigProvider.addLog(result['log']);
|
||||
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.error, true);
|
||||
appConfigProvider.addLog(result['log']);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
if (widget.serversProvider.blockedServicesList.loadStatus != 1) {
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
|
||||
if (filteringProvider.blockedServicesLoadStatus != LoadStatus.loaded) {
|
||||
loadBlockedServices();
|
||||
}
|
||||
|
||||
|
@ -89,10 +69,11 @@ class _ServicesModalStateWidget extends State<ServicesModalWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
|
||||
Widget content() {
|
||||
switch (serversProvider.blockedServicesList.loadStatus) {
|
||||
case 0:
|
||||
switch (filteringProvider.blockedServicesLoadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: SizedBox(
|
||||
|
@ -116,34 +97,34 @@ class _ServicesModalStateWidget extends State<ServicesModalWidget> {
|
|||
),
|
||||
);
|
||||
|
||||
case 1:
|
||||
case LoadStatus.loaded:
|
||||
return SizedBox(
|
||||
width: double.minPositive,
|
||||
height: MediaQuery.of(context).size.height*0.5,
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: serversProvider.blockedServicesList.services!.length,
|
||||
itemCount: filteringProvider.blockedServices!.services.length,
|
||||
itemBuilder: (context, index) => CheckboxListTile(
|
||||
title: Padding(
|
||||
padding: const EdgeInsets.only(left: 10),
|
||||
child: Text(
|
||||
serversProvider.blockedServicesList.services![index].name,
|
||||
filteringProvider.blockedServices!.services[index].name,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.normal,
|
||||
color: Theme.of(context).colorScheme.onSurface
|
||||
),
|
||||
),
|
||||
),
|
||||
value: blockedServices.contains(serversProvider.blockedServicesList.services![index].id),
|
||||
value: blockedServices.contains(filteringProvider.blockedServices!.services[index].id),
|
||||
checkboxShape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(5)
|
||||
),
|
||||
onChanged: (value) => checkUncheckService(value!, serversProvider.blockedServicesList.services![index].id)
|
||||
onChanged: (value) => checkUncheckService(value!, filteringProvider.blockedServices!.services[index].id)
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
case 2:
|
||||
case LoadStatus.error:
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(24),
|
||||
child: SizedBox(
|
||||
|
|
|
@ -9,12 +9,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/screens/filters/add_custom_rule.dart';
|
||||
import 'package:adguard_home_manager/screens/filters/add_list_modal.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.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/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class AddFiltersButton extends StatelessWidget {
|
||||
|
@ -30,6 +31,7 @@ class AddFiltersButton extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
@ -38,7 +40,7 @@ class AddFiltersButton extends StatelessWidget {
|
|||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(AppLocalizations.of(context)!.addingRule);
|
||||
|
||||
final List<String> newRules = serversProvider.filtering.data!.userRules;
|
||||
final List<String> newRules = filteringProvider.filtering!.userRules;
|
||||
newRules.add(rule);
|
||||
|
||||
final result = await setCustomRules(server: serversProvider.selectedServer!, rules: newRules);
|
||||
|
@ -46,9 +48,9 @@ class AddFiltersButton extends StatelessWidget {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
FilteringData filteringData = serversProvider.filtering.data!;
|
||||
Filtering filteringData = filteringProvider.filtering!;
|
||||
filteringData.userRules = newRules;
|
||||
serversProvider.setFilteringData(filteringData);
|
||||
filteringProvider.setFilteringData(filteringData);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -107,12 +109,12 @@ class AddFiltersButton extends StatelessWidget {
|
|||
final items = result1['data'].toString().split(' ')[1];
|
||||
|
||||
if (result2['result'] == 'success') {
|
||||
serversProvider.setFilteringData(result2['data']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setFilteringData(result2['data']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result2['log']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
|
||||
processModal.close();
|
||||
|
|
|
@ -7,11 +7,13 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/models/blocked_services.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class BlockedServicesScreen extends StatelessWidget {
|
||||
class BlockedServicesScreen extends StatefulWidget {
|
||||
final bool dialog;
|
||||
|
||||
const BlockedServicesScreen({
|
||||
|
@ -20,56 +22,37 @@ class BlockedServicesScreen extends StatelessWidget {
|
|||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
return BlockedServicesScreenWidget(
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
dialog: dialog,
|
||||
);
|
||||
}
|
||||
State<BlockedServicesScreen> createState() => _BlockedServicesScreenStateWidget();
|
||||
}
|
||||
|
||||
class BlockedServicesScreenWidget extends StatefulWidget {
|
||||
final ServersProvider serversProvider;
|
||||
final AppConfigProvider appConfigProvider;
|
||||
final bool dialog;
|
||||
|
||||
const BlockedServicesScreenWidget({
|
||||
Key? key,
|
||||
required this.serversProvider,
|
||||
required this.appConfigProvider,
|
||||
required this.dialog
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<BlockedServicesScreenWidget> createState() => _BlockedServicesScreenStateWidget();
|
||||
}
|
||||
|
||||
class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidget> {
|
||||
class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreen> {
|
||||
List<String> values = [];
|
||||
|
||||
Future loadBlockedServices() async {
|
||||
final result = await getBlockedServices(server: widget.serversProvider.selectedServer!);
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
|
||||
final result = await getBlockedServices(server: serversProvider.selectedServer!);
|
||||
if (result['result'] == 'success') {
|
||||
widget.serversProvider.setBlockedServicesListLoadStatus(1, true);
|
||||
widget.serversProvider.setBlockedServiceListData(result['data']);
|
||||
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setBlockedServiceListData(result['data']);
|
||||
}
|
||||
else {
|
||||
widget.serversProvider.setBlockedServicesListLoadStatus(2, true);
|
||||
widget.appConfigProvider.addLog(result['log']);
|
||||
filteringProvider.setBlockedServicesListLoadStatus(LoadStatus.loaded, true);
|
||||
appConfigProvider.addLog(result['log']);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
if (widget.serversProvider.blockedServicesList.loadStatus != 1) {
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
|
||||
if (filteringProvider.blockedServicesLoadStatus != LoadStatus.loaded) {
|
||||
loadBlockedServices();
|
||||
}
|
||||
|
||||
values = widget.serversProvider.filtering.data!.blockedServices;
|
||||
values = filteringProvider.filtering!.blockedServices;
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
@ -77,6 +60,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
void updateValues(bool value, BlockedService item) {
|
||||
|
@ -101,7 +85,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setBlockedServices(values);
|
||||
filteringProvider.setBlockedServices(values);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -119,8 +103,8 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
}
|
||||
|
||||
Widget body() {
|
||||
switch (serversProvider.blockedServicesList.loadStatus) {
|
||||
case 0:
|
||||
switch (filteringProvider.blockedServicesLoadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
width: double.maxFinite,
|
||||
|
@ -142,15 +126,15 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
),
|
||||
);
|
||||
|
||||
case 1:
|
||||
case LoadStatus.loaded:
|
||||
return ListView.builder(
|
||||
itemCount: serversProvider.blockedServicesList.services!.length,
|
||||
itemCount: filteringProvider.blockedServices!.services!.length,
|
||||
itemBuilder: (context, index) => Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: () => updateValues(
|
||||
values.contains(serversProvider.blockedServicesList.services![index].id),
|
||||
serversProvider.blockedServicesList.services![index]
|
||||
values.contains(filteringProvider.blockedServices!.services![index].id),
|
||||
filteringProvider.blockedServices!.services![index]
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
|
@ -163,17 +147,17 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
serversProvider.blockedServicesList.services![index].name,
|
||||
filteringProvider.blockedServices!.services![index].name,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: Theme.of(context).colorScheme.onSurface
|
||||
),
|
||||
),
|
||||
Checkbox(
|
||||
value: values.contains(serversProvider.blockedServicesList.services![index].id),
|
||||
value: values.contains(filteringProvider.blockedServices!.services![index].id),
|
||||
onChanged: (value) => updateValues(
|
||||
value!,
|
||||
serversProvider.blockedServicesList.services![index]
|
||||
filteringProvider.blockedServices!.services![index]
|
||||
),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(5)
|
||||
|
@ -186,7 +170,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreenWidge
|
|||
)
|
||||
);
|
||||
|
||||
case 2:
|
||||
case LoadStatus.error:
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
width: double.maxFinite,
|
||||
|
|
|
@ -17,6 +17,7 @@ import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal
|
|||
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/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
|
@ -24,49 +25,31 @@ import 'package:adguard_home_manager/services/http_requests.dart';
|
|||
import 'package:adguard_home_manager/models/clients.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class Filters extends StatelessWidget {
|
||||
class Filters extends StatefulWidget {
|
||||
const Filters({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
return FiltersWidget(
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider
|
||||
);
|
||||
}
|
||||
State<Filters> createState() => _FiltersState();
|
||||
}
|
||||
|
||||
class FiltersWidget extends StatefulWidget {
|
||||
final ServersProvider serversProvider;
|
||||
final AppConfigProvider appConfigProvider;
|
||||
|
||||
const FiltersWidget({
|
||||
Key? key,
|
||||
required this.serversProvider,
|
||||
required this.appConfigProvider
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<FiltersWidget> createState() => _FiltersWidgetState();
|
||||
}
|
||||
|
||||
class _FiltersWidgetState extends State<FiltersWidget> {
|
||||
class _FiltersState extends State<Filters> {
|
||||
Future fetchFilters() async {
|
||||
widget.serversProvider.setFilteringLoadStatus(LoadStatus.loading, false);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
|
||||
final result = await getFiltering(server: widget.serversProvider.selectedServer!);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loading, false);
|
||||
|
||||
final result = await getFiltering(server: serversProvider.selectedServer!);
|
||||
|
||||
if (mounted) {
|
||||
if (result['result'] == 'success') {
|
||||
widget.serversProvider.setFilteringData(result['data']);
|
||||
widget.serversProvider.setFilteringLoadStatus(LoadStatus.loaded, false);
|
||||
filteringProvider.setFilteringData(result['data']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, false);
|
||||
}
|
||||
else {
|
||||
widget.appConfigProvider.addLog(result['log']);
|
||||
widget.serversProvider.setFilteringLoadStatus(LoadStatus.error, false);
|
||||
appConfigProvider.addLog(result['log']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.error, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -84,6 +67,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
final statusProvider = Provider.of<StatusProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
|
@ -96,13 +80,13 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
final result = await updateLists(server: serversProvider.selectedServer!);
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
final result2 = await getFiltering(server: widget.serversProvider.selectedServer!);
|
||||
final result2 = await getFiltering(server: serversProvider.selectedServer!);
|
||||
|
||||
processModal.close();
|
||||
|
||||
if (mounted) {
|
||||
if (result2['result'] == 'success') {
|
||||
widget.serversProvider.setFilteringData(result2['data']);
|
||||
filteringProvider.setFilteringData(result2['data']);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -111,7 +95,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
);
|
||||
}
|
||||
else {
|
||||
widget.appConfigProvider.addLog(result2['log']);
|
||||
appConfigProvider.addLog(result2['log']);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -173,7 +157,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
|
||||
filteringProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -195,14 +179,14 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
processModal.open(AppLocalizations.of(context)!.changingUpdateFrequency);
|
||||
|
||||
final result = await requestChangeUpdateFrequency(server: serversProvider.selectedServer!, data: {
|
||||
"enabled": serversProvider.filtering.data!.enabled,
|
||||
"enabled": filteringProvider.filtering!.enabled,
|
||||
"interval": value
|
||||
});
|
||||
|
||||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
serversProvider.setFiltersUpdateFrequency(value);
|
||||
filteringProvider.setFiltersUpdateFrequency(value);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -246,16 +230,16 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(AppLocalizations.of(context)!.deletingRule);
|
||||
|
||||
final List<String> newRules = serversProvider.filtering.data!.userRules.where((r) => r != rule).toList();
|
||||
final List<String> newRules = filteringProvider.filtering!.userRules.where((r) => r != rule).toList();
|
||||
|
||||
final result = await setCustomRules(server: serversProvider.selectedServer!, rules: newRules);
|
||||
|
||||
processModal.close();
|
||||
|
||||
if (result['result'] == 'success') {
|
||||
FilteringData filteringData = serversProvider.filtering.data!;
|
||||
Filtering filteringData = filteringProvider.filtering!;
|
||||
filteringData.userRules = newRules;
|
||||
serversProvider.setFilteringData(filteringData);
|
||||
filteringProvider.setFilteringData(filteringData);
|
||||
|
||||
showSnacbkar(
|
||||
appConfigProvider: appConfigProvider,
|
||||
|
@ -309,11 +293,11 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
}
|
||||
|
||||
List<Widget> actions() {
|
||||
if (serversProvider.filtering.loadStatus == LoadStatus.loaded) {
|
||||
if (filteringProvider.loadStatus == LoadStatus.loaded) {
|
||||
return [
|
||||
IconButton(
|
||||
onPressed: enableDisableFiltering,
|
||||
tooltip: serversProvider.filtering.data!.enabled == true
|
||||
tooltip: filteringProvider.filtering!.enabled == true
|
||||
? AppLocalizations.of(context)!.disableFiltering
|
||||
: AppLocalizations.of(context)!.enableFiltering,
|
||||
icon: Stack(
|
||||
|
@ -330,11 +314,11 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
color: Colors.white
|
||||
),
|
||||
child: Icon(
|
||||
serversProvider.filtering.data!.enabled == true
|
||||
filteringProvider.filtering!.enabled == true
|
||||
? Icons.check_circle_rounded
|
||||
: Icons.cancel,
|
||||
size: 12,
|
||||
color: serversProvider.filtering.data!.enabled == true
|
||||
color: filteringProvider.filtering!.enabled == true
|
||||
? appConfigProvider.useThemeColorForStatus == true
|
||||
? Theme.of(context).colorScheme.primary
|
||||
: Colors.green
|
||||
|
@ -355,7 +339,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => UpdateIntervalListsModal(
|
||||
interval: serversProvider.filtering.data!.interval,
|
||||
interval: filteringProvider.filtering!.interval,
|
||||
onChange: setUpdateFrequency,
|
||||
dialog: true,
|
||||
),
|
||||
|
@ -365,7 +349,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
|
|||
showModalBottomSheet(
|
||||
context: context,
|
||||
builder: (context) => UpdateIntervalListsModal(
|
||||
interval: serversProvider.filtering.data!.interval,
|
||||
interval: filteringProvider.filtering!.interval,
|
||||
onChange: setUpdateFrequency,
|
||||
dialog: false,
|
||||
),
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|||
import 'package:adguard_home_manager/screens/filters/custom_rules_list.dart';
|
||||
import 'package:adguard_home_manager/screens/filters/filters_list.dart';
|
||||
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
@ -49,6 +50,7 @@ class _FiltersTabsViewState extends State<FiltersTabsView> with TickerProviderSt
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
|
||||
return DefaultTabController(
|
||||
length: 3,
|
||||
|
@ -110,28 +112,28 @@ class _FiltersTabsViewState extends State<FiltersTabsView> with TickerProviderSt
|
|||
controller: tabController,
|
||||
children: [
|
||||
FiltersList(
|
||||
loadStatus: serversProvider.filtering.loadStatus,
|
||||
loadStatus: filteringProvider.loadStatus,
|
||||
scrollController: scrollController,
|
||||
type: 'whitelist',
|
||||
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
|
||||
? serversProvider.filtering.data!.whitelistFilters : [],
|
||||
data: filteringProvider.loadStatus == LoadStatus.loaded
|
||||
? filteringProvider.filtering!.whitelistFilters : [],
|
||||
fetchData: widget.fetchFilters,
|
||||
onOpenDetailsScreen: widget.onOpenDetailsModal,
|
||||
),
|
||||
FiltersList(
|
||||
loadStatus: serversProvider.filtering.loadStatus,
|
||||
loadStatus: filteringProvider.loadStatus,
|
||||
scrollController: scrollController,
|
||||
type: 'blacklist',
|
||||
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
|
||||
? serversProvider.filtering.data!.filters : [],
|
||||
data: filteringProvider.loadStatus == LoadStatus.loaded
|
||||
? filteringProvider.filtering!.filters : [],
|
||||
fetchData: widget.fetchFilters,
|
||||
onOpenDetailsScreen: widget.onOpenDetailsModal,
|
||||
),
|
||||
CustomRulesList(
|
||||
loadStatus: serversProvider.filtering.loadStatus,
|
||||
loadStatus: filteringProvider.loadStatus,
|
||||
scrollController: scrollController,
|
||||
data: serversProvider.filtering.loadStatus == LoadStatus.loaded
|
||||
? serversProvider.filtering.data!.userRules : [],
|
||||
data: filteringProvider.loadStatus == LoadStatus.loaded
|
||||
? filteringProvider.filtering!.userRules : [],
|
||||
fetchData: widget.fetchFilters,
|
||||
onRemoveCustomRule: widget.onRemoveCustomRule,
|
||||
),
|
||||
|
|
|
@ -15,6 +15,7 @@ import 'package:adguard_home_manager/widgets/options_modal.dart';
|
|||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/models/menu_option.dart';
|
||||
import 'package:adguard_home_manager/functions/copy_clipboard.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/functions/number_format.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
@ -37,6 +38,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
bool checkIfComment(String value) {
|
||||
|
@ -84,7 +86,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
}
|
||||
|
||||
Widget content() {
|
||||
switch (serversProvider.filtering.loadStatus) {
|
||||
switch (filteringProvider.loadStatus) {
|
||||
case LoadStatus.loading:
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
@ -140,18 +142,18 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
itemCount: serversProvider.filtering.data!.whitelistFilters.length,
|
||||
itemCount: filteringProvider.filtering!.whitelistFilters.length,
|
||||
itemBuilder: (context, index) => ListOptionsMenu(
|
||||
list: serversProvider.filtering.data!.whitelistFilters[index],
|
||||
list: filteringProvider.filtering!.whitelistFilters[index],
|
||||
listType: 'whitelist',
|
||||
child: CustomListTile(
|
||||
title: serversProvider.filtering.data!.whitelistFilters[index].name,
|
||||
subtitle: "${intFormat(serversProvider.filtering.data!.whitelistFilters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
|
||||
title: filteringProvider.filtering!.whitelistFilters[index].name,
|
||||
subtitle: "${intFormat(filteringProvider.filtering!.whitelistFilters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
|
||||
trailing: Icon(
|
||||
serversProvider.filtering.data!.whitelistFilters[index].enabled == true
|
||||
filteringProvider.filtering!.whitelistFilters[index].enabled == true
|
||||
? Icons.check_circle_rounded
|
||||
: Icons.cancel,
|
||||
color: serversProvider.filtering.data!.whitelistFilters[index].enabled == true
|
||||
color: filteringProvider.filtering!.whitelistFilters[index].enabled == true
|
||||
? appConfigProvider.useThemeColorForStatus == true
|
||||
? Theme.of(context).colorScheme.primary
|
||||
: Colors.green
|
||||
|
@ -159,7 +161,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
? Colors.grey
|
||||
: Colors.red
|
||||
),
|
||||
onTap: () => onOpenDetailsModal(serversProvider.filtering.data!.whitelistFilters[index], 'whitelist'),
|
||||
onTap: () => onOpenDetailsModal(filteringProvider.filtering!.whitelistFilters[index], 'whitelist'),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -196,18 +198,18 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
itemCount: serversProvider.filtering.data!.filters.length,
|
||||
itemCount: filteringProvider.filtering!.filters.length,
|
||||
itemBuilder: (context, index) => ListOptionsMenu(
|
||||
list: serversProvider.filtering.data!.filters[index],
|
||||
list: filteringProvider.filtering!.filters[index],
|
||||
listType: 'blacklist',
|
||||
child: CustomListTile(
|
||||
title: serversProvider.filtering.data!.filters[index].name,
|
||||
subtitle: "${intFormat(serversProvider.filtering.data!.filters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
|
||||
title: filteringProvider.filtering!.filters[index].name,
|
||||
subtitle: "${intFormat(filteringProvider.filtering!.filters[index].rulesCount, Platform.localeName)} ${AppLocalizations.of(context)!.enabledRules}",
|
||||
trailing: Icon(
|
||||
serversProvider.filtering.data!.filters[index].enabled == true
|
||||
filteringProvider.filtering!.filters[index].enabled == true
|
||||
? Icons.check_circle_rounded
|
||||
: Icons.cancel,
|
||||
color: serversProvider.filtering.data!.filters[index].enabled == true
|
||||
color: filteringProvider.filtering!.filters[index].enabled == true
|
||||
? appConfigProvider.useThemeColorForStatus == true
|
||||
? Theme.of(context).colorScheme.primary
|
||||
: Colors.green
|
||||
|
@ -215,7 +217,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
? Colors.grey
|
||||
: Colors.red
|
||||
),
|
||||
onTap: () => onOpenDetailsModal(serversProvider.filtering.data!.filters[index], 'blacklist'),
|
||||
onTap: () => onOpenDetailsModal(filteringProvider.filtering!.filters[index], 'blacklist'),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -252,7 +254,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
),
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
itemCount: serversProvider.filtering.data!.userRules.length,
|
||||
itemCount: filteringProvider.filtering!.userRules.length,
|
||||
itemBuilder: (context, index) => ContextMenuArea(
|
||||
builder: (context) => [
|
||||
CustomListTile(
|
||||
|
@ -261,7 +263,7 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
onTap: () {
|
||||
copyToClipboard(
|
||||
context: context,
|
||||
value: serversProvider.filtering.data!.userRules[index],
|
||||
value: filteringProvider.filtering!.userRules[index],
|
||||
successMessage: AppLocalizations.of(context)!.copiedClipboard,
|
||||
);
|
||||
Navigator.pop(context);
|
||||
|
@ -278,17 +280,17 @@ class FiltersTripleColumn extends StatelessWidget {
|
|||
icon: Icons.copy_rounded,
|
||||
action: () => copyToClipboard(
|
||||
context: context,
|
||||
value: serversProvider.filtering.data!.userRules[index],
|
||||
value: filteringProvider.filtering!.userRules[index],
|
||||
successMessage: AppLocalizations.of(context)!.copiedClipboard,
|
||||
)
|
||||
)
|
||||
]
|
||||
)
|
||||
),
|
||||
title: serversProvider.filtering.data!.userRules[index],
|
||||
subtitleWidget: generateSubtitle(serversProvider.filtering.data!.userRules[index]),
|
||||
title: filteringProvider.filtering!.userRules[index],
|
||||
subtitleWidget: generateSubtitle(filteringProvider.filtering!.userRules[index]),
|
||||
trailing: IconButton(
|
||||
onPressed: () => onRemoveCustomRule(serversProvider.filtering.data!.userRules[index]),
|
||||
onPressed: () => onRemoveCustomRule(filteringProvider.filtering!.userRules[index]),
|
||||
icon: const Icon(Icons.delete)
|
||||
),
|
||||
),
|
||||
|
|
|
@ -13,6 +13,7 @@ import 'package:adguard_home_manager/screens/filters/list_functions.dart';
|
|||
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
|
||||
|
||||
import 'package:adguard_home_manager/functions/format_time.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
@ -61,16 +62,17 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
Filter? list;
|
||||
try {
|
||||
list = serversProvider.filtering.data != null
|
||||
list = filteringProvider.filtering != null
|
||||
? widget.type == 'whitelist'
|
||||
? serversProvider.filtering.data!.whitelistFilters.firstWhere((l) => l.id == widget.listId)
|
||||
: serversProvider.filtering.data!.filters.firstWhere((l) => l.id == widget.listId)
|
||||
? filteringProvider.filtering!.whitelistFilters.firstWhere((l) => l.id == widget.listId)
|
||||
: filteringProvider.filtering!.filters.firstWhere((l) => l.id == widget.listId)
|
||||
: null;
|
||||
} catch (e) {
|
||||
// ------- //
|
||||
|
@ -177,8 +179,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
onEdit: ({required Filter list, required String type}) async {
|
||||
final result = await editList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list,
|
||||
type: widget.type
|
||||
);
|
||||
|
@ -210,8 +210,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
onEdit: ({required Filter list, required String type}) async {
|
||||
final result = await editList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list,
|
||||
type: widget.type
|
||||
);
|
||||
|
@ -248,8 +246,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
onConfirm: () async {
|
||||
final result = await deleteList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list!,
|
||||
type: widget.type,
|
||||
);
|
||||
|
@ -315,8 +311,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
onPressed: () async {
|
||||
final result = await enableDisableList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list!,
|
||||
listType: widget.type,
|
||||
);
|
||||
|
@ -402,8 +396,6 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
|
|||
onPressed: () async {
|
||||
final result = await enableDisableList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list!,
|
||||
listType: widget.type,
|
||||
);
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
// ignore_for_file: use_build_context_synchronously
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||
import 'package:adguard_home_manager/providers/filters_provider.dart';
|
||||
import 'package:adguard_home_manager/models/filtering.dart';
|
||||
import 'package:adguard_home_manager/constants/enums.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
|
@ -12,11 +14,13 @@ import 'package:adguard_home_manager/services/http_requests.dart';
|
|||
|
||||
Future<bool> enableDisableList({
|
||||
required BuildContext context,
|
||||
required ServersProvider serversProvider,
|
||||
required AppConfigProvider appConfigProvider,
|
||||
required Filter list,
|
||||
required String listType,
|
||||
}) async {
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
|
||||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(
|
||||
list.enabled == true
|
||||
|
@ -40,12 +44,12 @@ Future<bool> enableDisableList({
|
|||
final result2 = await getFiltering(server: serversProvider.selectedServer!);
|
||||
|
||||
if (result2['result'] == 'success') {
|
||||
serversProvider.setFilteringData(result2['data']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setFilteringData(result2['data']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result2['log']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -59,11 +63,13 @@ Future<bool> enableDisableList({
|
|||
|
||||
Future<bool> editList({
|
||||
required BuildContext context,
|
||||
required ServersProvider serversProvider,
|
||||
required AppConfigProvider appConfigProvider,
|
||||
required Filter list,
|
||||
required String type
|
||||
}) async {
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
|
||||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(AppLocalizations.of(context)!.updatingListData);
|
||||
|
||||
|
@ -81,12 +87,12 @@ Future<bool> editList({
|
|||
final result2 = await getFiltering(server: serversProvider.selectedServer!);
|
||||
|
||||
if (result2['result'] == 'success') {
|
||||
serversProvider.setFilteringData(result2['data']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setFilteringData(result2['data']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result2['log']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.error, true);
|
||||
}
|
||||
|
||||
processModal.close();
|
||||
|
@ -103,11 +109,13 @@ Future<bool> editList({
|
|||
|
||||
Future<bool> deleteList({
|
||||
required BuildContext context,
|
||||
required ServersProvider serversProvider,
|
||||
required AppConfigProvider appConfigProvider,
|
||||
required Filter list,
|
||||
required String type
|
||||
}) async {
|
||||
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||
final filteringProvider = Provider.of<FilteringProvider>(context, listen: false);
|
||||
|
||||
ProcessModal processModal = ProcessModal(context: context);
|
||||
processModal.open(AppLocalizations.of(context)!.deletingList);
|
||||
|
||||
|
@ -120,12 +128,12 @@ Future<bool> deleteList({
|
|||
final result2 = await getFiltering(server: serversProvider.selectedServer!);
|
||||
|
||||
if (result2['result'] == 'success') {
|
||||
serversProvider.setFilteringData(result2['data']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
filteringProvider.setFilteringData(result2['data']);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loaded, true);
|
||||
}
|
||||
else {
|
||||
appConfigProvider.addLog(result2['log']);
|
||||
serversProvider.setFilteringLoadStatus(LoadStatus.loading, true);
|
||||
filteringProvider.setFilteringLoadStatus(LoadStatus.loading, true);
|
||||
}
|
||||
|
||||
processModal.close();
|
||||
|
|
|
@ -14,7 +14,6 @@ import 'package:adguard_home_manager/models/filtering.dart';
|
|||
import 'package:adguard_home_manager/functions/copy_clipboard.dart';
|
||||
import 'package:adguard_home_manager/models/menu_option.dart';
|
||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||
|
||||
class ListOptionsMenu extends StatelessWidget {
|
||||
final Filter list;
|
||||
|
@ -30,14 +29,11 @@ class ListOptionsMenu extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final serversProvider = Provider.of<ServersProvider>(context);
|
||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||
|
||||
void enableDisable() async {
|
||||
final result = await enableDisableList(
|
||||
context: context,
|
||||
serversProvider: serversProvider,
|
||||
appConfigProvider: appConfigProvider,
|
||||
list: list,
|
||||
listType: listType,
|
||||
);
|
||||
|
|
|
@ -895,7 +895,7 @@ Future getFiltering({
|
|||
if (result[0]['statusCode'] == 200 && result[0]['statusCode'] == 200) {
|
||||
return {
|
||||
'result': 'success',
|
||||
'data': FilteringData.fromJson({
|
||||
'data': Filtering.fromJson({
|
||||
...jsonDecode(result[0]['body']),
|
||||
"blocked_services": result[1]['body'] != null
|
||||
? jsonDecode(result[1]['body'])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue