From 5afe912e7e62669f0cb065f76fb72bfd860354e5 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Wed, 24 May 2023 19:12:11 +0200 Subject: [PATCH] Extracted dns rewrites --- lib/main.dart | 19 +++-- lib/models/rewrite_rules.dart | 20 +---- lib/providers/rewrute_rules_provider.dart | 29 +++++++ lib/providers/servers_provider.dart | 22 ------ .../dns_rewrites/add_dns_rewrite_modal.dart | 4 +- .../settings/dns_rewrites/dns_rewrites.dart | 79 ++++++++----------- lib/screens/settings/settings.dart | 2 +- lib/services/http_requests.dart | 4 +- 8 files changed, 80 insertions(+), 99 deletions(-) create mode 100644 lib/providers/rewrute_rules_provider.dart diff --git a/lib/main.dart b/lib/main.dart index 6ea9fb4..7582e48 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -21,6 +21,7 @@ import 'package:adguard_home_manager/providers/logs_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/providers/filters_provider.dart'; +import 'package:adguard_home_manager/providers/rewrute_rules_provider.dart'; import 'package:adguard_home_manager/providers/dhcp_provider.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; @@ -45,13 +46,14 @@ void main() async { await dotenv.load(fileName: '.env'); - AppConfigProvider appConfigProvider = AppConfigProvider(); - ServersProvider serversProvider = ServersProvider(); - StatusProvider statusProvider = StatusProvider(); - ClientsProvider clientsProvider = ClientsProvider(); - FilteringProvider filtersProvider = FilteringProvider(); - DhcpProvider dhcpProvider = DhcpProvider(); - LogsProvider logsProvider = LogsProvider(); + final AppConfigProvider appConfigProvider = AppConfigProvider(); + final ServersProvider serversProvider = ServersProvider(); + final StatusProvider statusProvider = StatusProvider(); + final ClientsProvider clientsProvider = ClientsProvider(); + final FilteringProvider filtersProvider = FilteringProvider(); + final DhcpProvider dhcpProvider = DhcpProvider(); + final RewriteRulesProvider rewriteRulesProvider = RewriteRulesProvider(); + final LogsProvider logsProvider = LogsProvider(); DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); if (Platform.isAndroid) { @@ -116,6 +118,9 @@ void main() async { ChangeNotifierProvider( create: ((context) => dhcpProvider) ), + ChangeNotifierProvider( + create: ((context) => rewriteRulesProvider) + ), ChangeNotifierProxyProvider( create: (context) => filtersProvider, update: (context, status, filtering) => filtering!..updateStatus(status), diff --git a/lib/models/rewrite_rules.dart b/lib/models/rewrite_rules.dart index 44bef8d..5af2851 100644 --- a/lib/models/rewrite_rules.dart +++ b/lib/models/rewrite_rules.dart @@ -1,29 +1,13 @@ -import 'dart:convert'; - class RewriteRules { - int loadStatus = 0; - List? data; - - RewriteRules({ - required this.loadStatus, - this.data - }); -} - -List rewriteRulesDataFromJson(String str) => List.from(json.decode(str).map((x) => RewriteRulesData.fromJson(x))); - -String rewriteRulesDataToJson(List data) => json.encode(List.from(data.map((x) => x.toJson()))); - -class RewriteRulesData { final String domain; final String answer; - RewriteRulesData({ + RewriteRules({ required this.domain, required this.answer, }); - factory RewriteRulesData.fromJson(Map json) => RewriteRulesData( + factory RewriteRules.fromJson(Map json) => RewriteRules( domain: json["domain"], answer: json["answer"], ); diff --git a/lib/providers/rewrute_rules_provider.dart b/lib/providers/rewrute_rules_provider.dart new file mode 100644 index 0000000..a4c6825 --- /dev/null +++ b/lib/providers/rewrute_rules_provider.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; + +import 'package:adguard_home_manager/constants/enums.dart'; +import 'package:adguard_home_manager/models/rewrite_rules.dart'; + +class RewriteRulesProvider with ChangeNotifier { + LoadStatus _loadStatus = LoadStatus.loading; + List? _rewriteRules; + + LoadStatus get loadStatus { + return _loadStatus; + } + + List? get rewriteRules { + return _rewriteRules; + } + + void setRewriteRulesData(List data) { + _rewriteRules = data; + notifyListeners(); + } + + void setRewriteRulesLoadStatus(LoadStatus status, bool notify) { + _loadStatus = status; + if (notify == true) { + notifyListeners(); + } + } +} \ No newline at end of file diff --git a/lib/providers/servers_provider.dart b/lib/providers/servers_provider.dart index eb795a8..6536cd4 100644 --- a/lib/providers/servers_provider.dart +++ b/lib/providers/servers_provider.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:sqflite/sqflite.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/server.dart'; @@ -18,11 +17,6 @@ class ServersProvider with ChangeNotifier { List _serversList = []; Server? _selectedServer; - final RewriteRules _rewriteRules = RewriteRules( - loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error - data: null - ); - final DnsInfo _dnsInfo = DnsInfo( loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error data: null @@ -41,10 +35,6 @@ class ServersProvider with ChangeNotifier { return _selectedServer; } - RewriteRules get rewriteRules { - return _rewriteRules; - } - DnsInfo get dnsInfo { return _dnsInfo; } @@ -66,19 +56,7 @@ class ServersProvider with ChangeNotifier { _selectedServer = server; notifyListeners(); } - - void setRewriteRulesData(List data) { - _rewriteRules.data = data; - notifyListeners(); - } - void setRewriteRulesLoadStatus(int status, bool notify) { - _rewriteRules.loadStatus = status; - if (notify == true) { - notifyListeners(); - } - } - void setDnsInfoData(DnsInfoData data) { _dnsInfo.data = data; notifyListeners(); diff --git a/lib/screens/settings/dns_rewrites/add_dns_rewrite_modal.dart b/lib/screens/settings/dns_rewrites/add_dns_rewrite_modal.dart index edff851..24ee717 100644 --- a/lib/screens/settings/dns_rewrites/add_dns_rewrite_modal.dart +++ b/lib/screens/settings/dns_rewrites/add_dns_rewrite_modal.dart @@ -6,7 +6,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/models/rewrite_rules.dart'; class AddDnsRewriteModal extends StatefulWidget { - final void Function(RewriteRulesData) onConfirm; + final void Function(RewriteRules) onConfirm; final bool dialog; const AddDnsRewriteModal({ @@ -143,7 +143,7 @@ class _AddDnsRewriteModalState extends State { ? () { Navigator.pop(context); widget.onConfirm( - RewriteRulesData( + RewriteRules( domain: domainController.text, answer: answerController.text ) diff --git a/lib/screens/settings/dns_rewrites/dns_rewrites.dart b/lib/screens/settings/dns_rewrites/dns_rewrites.dart index 203c068..6fce727 100644 --- a/lib/screens/settings/dns_rewrites/dns_rewrites.dart +++ b/lib/screens/settings/dns_rewrites/dns_rewrites.dart @@ -12,52 +12,36 @@ import 'package:adguard_home_manager/screens/settings/dns_rewrites/delete_dns_re import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; +import 'package:adguard_home_manager/constants/enums.dart'; +import 'package:adguard_home_manager/providers/rewrute_rules_provider.dart'; import 'package:adguard_home_manager/models/rewrite_rules.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; -class DnsRewrites extends StatelessWidget { - const DnsRewrites({Key? key}) : super(key: key); +class DnsRewritesScreen extends StatefulWidget { + const DnsRewritesScreen({Key? key}) : super(key: key); @override - Widget build(BuildContext context) { - final serversProvider = Provider.of(context); - final appConfigProvider = Provider.of(context); - - return DnsRewritesWidget( - serversProvider: serversProvider, - appConfigProvider: appConfigProvider, - ); - } + State createState() => _DnsRewritesScreenState(); } -class DnsRewritesWidget extends StatefulWidget { - final ServersProvider serversProvider; - final AppConfigProvider appConfigProvider; - - const DnsRewritesWidget({ - Key? key, - required this.serversProvider, - required this.appConfigProvider - }) : super(key: key); - - @override - State createState() => _DnsRewritesWidgetState(); -} - -class _DnsRewritesWidgetState extends State { +class _DnsRewritesScreenState extends State { Future fetchData() async { - widget.serversProvider.setRewriteRulesLoadStatus(0, false); + final rewriteRulesProvider = Provider.of(context, listen: false); + final serversProvider = Provider.of(context, listen: false); + final appConfigProvider = Provider.of(context, listen: false); - final result = await getDnsRewriteRules(server: widget.serversProvider.selectedServer!); + rewriteRulesProvider.setRewriteRulesLoadStatus(LoadStatus.loading, false); + + final result = await getDnsRewriteRules(server: serversProvider.selectedServer!); if (result['result'] == 'success') { - widget.serversProvider.setRewriteRulesData(result['data']); - widget.serversProvider.setRewriteRulesLoadStatus(1, true); + rewriteRulesProvider.setRewriteRulesData(result['data']); + rewriteRulesProvider.setRewriteRulesLoadStatus(LoadStatus.loaded, true); } else { - widget.appConfigProvider.addLog(result['log']); - widget.serversProvider.setRewriteRulesLoadStatus(2, true); + appConfigProvider.addLog(result['log']); + rewriteRulesProvider.setRewriteRulesLoadStatus(LoadStatus.error, true); } } @@ -70,11 +54,12 @@ class _DnsRewritesWidgetState extends State { @override Widget build(BuildContext context) { final serversProvider = Provider.of(context); + final rewriteRulesProvider = Provider.of(context); final appConfigProvider = Provider.of(context); final width = MediaQuery.of(context).size.width; - void deleteDnsRewrite(RewriteRulesData rule) async { + void deleteDnsRewrite(RewriteRules rule) async { ProcessModal processModal = ProcessModal(context: context); processModal.open(AppLocalizations.of(context)!.deleting); @@ -86,9 +71,9 @@ class _DnsRewritesWidgetState extends State { processModal.close(); if (result['result'] == 'success') { - List data = serversProvider.rewriteRules.data!; + List data = rewriteRulesProvider.rewriteRules!; data = data.where((item) => item.domain != rule.domain).toList(); - serversProvider.setRewriteRulesData(data); + rewriteRulesProvider.setRewriteRulesData(data); showSnacbkar( appConfigProvider: appConfigProvider, @@ -106,7 +91,7 @@ class _DnsRewritesWidgetState extends State { } } - void addDnsRewrite(RewriteRulesData rule) async { + void addDnsRewrite(RewriteRules rule) async { ProcessModal processModal = ProcessModal(context: context); processModal.open(AppLocalizations.of(context)!.addingRewrite); @@ -118,9 +103,9 @@ class _DnsRewritesWidgetState extends State { processModal.close(); if (result['result'] == 'success') { - List data = serversProvider.rewriteRules.data!; + List data = rewriteRulesProvider.rewriteRules!; data.add(rule); - serversProvider.setRewriteRulesData(data); + rewriteRulesProvider.setRewriteRulesData(data); showSnacbkar( appConfigProvider: appConfigProvider, @@ -139,8 +124,8 @@ class _DnsRewritesWidgetState extends State { } Widget generateBody() { - switch (serversProvider.rewriteRules.loadStatus) { - case 0: + switch (rewriteRulesProvider.loadStatus) { + case LoadStatus.loading: return SizedBox( width: double.maxFinite, child: Column( @@ -160,15 +145,15 @@ class _DnsRewritesWidgetState extends State { ), ); - case 1: - if (serversProvider.rewriteRules.data!.isNotEmpty) { + case LoadStatus.loaded: + if (rewriteRulesProvider.rewriteRules!.isNotEmpty) { return RefreshIndicator( onRefresh: () async { await fetchData(); }, child: ListView.builder( padding: const EdgeInsets.only(top: 0), - itemCount: serversProvider.rewriteRules.data!.length, + itemCount: rewriteRulesProvider.rewriteRules!.length, itemBuilder: (context, index) => Container( padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 10), decoration: BoxDecoration( @@ -195,7 +180,7 @@ class _DnsRewritesWidgetState extends State { ), ), Text( - serversProvider.rewriteRules.data![index].domain, + rewriteRulesProvider.rewriteRules![index].domain, style: TextStyle( color: Theme.of(context).colorScheme.onSurface ), @@ -213,7 +198,7 @@ class _DnsRewritesWidgetState extends State { ), ), Text( - serversProvider.rewriteRules.data![index].answer, + rewriteRulesProvider.rewriteRules![index].answer, style: TextStyle( color: Theme.of(context).colorScheme.onSurface ), @@ -227,7 +212,7 @@ class _DnsRewritesWidgetState extends State { showDialog( context: context, builder: (context) => DeleteDnsRewrite( - onConfirm: () => deleteDnsRewrite(serversProvider.rewriteRules.data![index]) + onConfirm: () => deleteDnsRewrite(rewriteRulesProvider.rewriteRules![index]) ) ) }, @@ -251,7 +236,7 @@ class _DnsRewritesWidgetState extends State { ); } - case 2: + case LoadStatus.error: return SizedBox( width: double.maxFinite, child: Column( diff --git a/lib/screens/settings/settings.dart b/lib/screens/settings/settings.dart index d08c322..08b9d8c 100644 --- a/lib/screens/settings/settings.dart +++ b/lib/screens/settings/settings.dart @@ -177,7 +177,7 @@ class SettingsWidget extends StatelessWidget { title: AppLocalizations.of(context)!.dnsRewrites, subtitle: AppLocalizations.of(context)!.dnsRewritesDescription, thisItem: 5, - screenToNavigate: const DnsRewrites(), + screenToNavigate: const DnsRewritesScreen(), ), if (serversProvider.updateAvailable.data != null) settingsTile( icon: Icons.system_update_rounded, diff --git a/lib/services/http_requests.dart b/lib/services/http_requests.dart index 3997dfd..ac85f0a 100644 --- a/lib/services/http_requests.dart +++ b/lib/services/http_requests.dart @@ -1528,8 +1528,8 @@ Future getDnsRewriteRules({ if (result['hasResponse'] == true) { if (result['statusCode'] == 200) { - final List data = List.from( - jsonDecode(result['body']).map((item) => RewriteRulesData.fromJson(item)) + final List data = List.from( + jsonDecode(result['body']).map((item) => RewriteRules.fromJson(item)) ); return {