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