From 34bff2f506b99c9fb4d420a8940d4a266ceda3a7 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Mon, 20 Nov 2023 15:16:20 +0100 Subject: [PATCH] Improved server version check --- lib/classes/process_modal.dart | 14 +++----- lib/functions/clear_dns_cache.dart | 2 +- lib/providers/status_provider.dart | 6 ++-- lib/screens/clients/added_list.dart | 4 +-- lib/screens/clients/fab.dart | 2 +- lib/screens/clients/search_clients.dart | 4 +-- lib/screens/filters/add_button.dart | 4 +-- .../filters/details/list_details_screen.dart | 4 +-- lib/screens/filters/filters.dart | 8 ++--- lib/screens/filters/list_options_menu.dart | 2 +- .../modals/blocked_services_screen.dart | 2 +- .../filters/selection/selection_screen.dart | 4 +-- .../logs/details/log_details_screen.dart | 2 +- lib/screens/logs/logs_list_appbar.dart | 4 +-- .../access_settings/clients_list.dart | 4 +-- lib/screens/settings/dhcp/dhcp.dart | 6 ++-- lib/screens/settings/dhcp/dhcp_leases.dart | 4 +-- lib/screens/settings/dns/bootstrap_dns.dart | 2 +- lib/screens/settings/dns/cache_config.dart | 2 +- .../settings/dns/dns_server_settings.dart | 2 +- .../settings/dns/private_reverse_servers.dart | 2 +- lib/screens/settings/dns/upstream_dns.dart | 2 +- .../settings/dns_rewrites/dns_rewrites.dart | 6 ++-- .../settings/encryption/encryption.dart | 2 +- .../settings/safe_search_settings.dart | 2 +- .../settings/update_server/update.dart | 2 +- lib/widgets/domain_options.dart | 2 +- .../servers_list/server_tile_functions.dart | 32 +++++++++++++++++-- .../servers_list/servers_list_item.dart | 2 +- 29 files changed, 77 insertions(+), 57 deletions(-) diff --git a/lib/classes/process_modal.dart b/lib/classes/process_modal.dart index 6febebb..ac3db92 100644 --- a/lib/classes/process_modal.dart +++ b/lib/classes/process_modal.dart @@ -1,20 +1,14 @@ +import 'package:adguard_home_manager/config/globals.dart'; import 'package:flutter/material.dart'; import 'package:adguard_home_manager/widgets/process_dialog.dart'; class ProcessModal { - late BuildContext context; - - ProcessModal({ - required this.context - }); - void open(String message) async { await Future.delayed(const Duration(seconds: 0), () => { showDialog( - context: context, - builder: (c) { - context = c; + context: globalNavigatorKey.currentContext!, + builder: (ctx) { return ProcessDialog( message: message, ); @@ -26,6 +20,6 @@ class ProcessModal { } void close() { - Navigator.pop(context); + Navigator.pop(globalNavigatorKey.currentContext!); } } \ No newline at end of file diff --git a/lib/functions/clear_dns_cache.dart b/lib/functions/clear_dns_cache.dart index d0b44cd..4a6fe53 100644 --- a/lib/functions/clear_dns_cache.dart +++ b/lib/functions/clear_dns_cache.dart @@ -12,7 +12,7 @@ import 'package:adguard_home_manager/models/server.dart'; Future clearDnsCache(BuildContext context, Server server) async { final serversProvider = Provider.of(context, listen: false); - final ProcessModal processModal = ProcessModal(context: context); + final ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.clearingDnsCache); final result = await serversProvider.apiClient2!.resetDnsCache(); diff --git a/lib/providers/status_provider.dart b/lib/providers/status_provider.dart index 5fba2dd..0c519f8 100644 --- a/lib/providers/status_provider.dart +++ b/lib/providers/status_provider.dart @@ -237,7 +237,8 @@ class StatusProvider with ChangeNotifier { } Future getServerStatus({ - bool? withLoadingIndicator + bool? withLoadingIndicator, + bool? overrideCheckServerVersion }) async { if (withLoadingIndicator == true) { _loadStatus = LoadStatus.loading; @@ -258,7 +259,7 @@ class StatusProvider with ChangeNotifier { referenceVersion: MinimumServerVersion.stable, referenceVersionBeta: MinimumServerVersion.beta ); - if (validVersion == false) { + if (validVersion == false && overrideCheckServerVersion != true) { showDialog( context: globalNavigatorKey.currentContext!, builder: (ctx) => UnsupportedVersionModal( @@ -269,7 +270,6 @@ class StatusProvider with ChangeNotifier { ) ); } - return true; } else { diff --git a/lib/screens/clients/added_list.dart b/lib/screens/clients/added_list.dart index 2c93a04..124f32c 100644 --- a/lib/screens/clients/added_list.dart +++ b/lib/screens/clients/added_list.dart @@ -75,7 +75,7 @@ class _AddedListState extends State { final width = MediaQuery.of(context).size.width; void confirmEditClient(Client client) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingClient); final result = await clientsProvider.editClient(client); @@ -99,7 +99,7 @@ class _AddedListState extends State { } void deleteClient(Client client) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.removingClient); final result = await clientsProvider.deleteClient(client); diff --git a/lib/screens/clients/fab.dart b/lib/screens/clients/fab.dart index ce291c2..64fd098 100644 --- a/lib/screens/clients/fab.dart +++ b/lib/screens/clients/fab.dart @@ -25,7 +25,7 @@ class ClientsFab extends StatelessWidget { final width = MediaQuery.of(context).size.width; void confirmAddClient(Client client) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingClient); final result = await clientsProvider.addClient(client); diff --git a/lib/screens/clients/search_clients.dart b/lib/screens/clients/search_clients.dart index bbc330c..895f458 100644 --- a/lib/screens/clients/search_clients.dart +++ b/lib/screens/clients/search_clients.dart @@ -86,7 +86,7 @@ class _SearchClientsState extends State { final width = MediaQuery.of(context).size.width; void deleteClient(Client client) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.removingClient); final result = await clientsProvider.deleteClient(client); @@ -110,7 +110,7 @@ class _SearchClientsState extends State { } void confirmEditClient(Client client) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingClient); final result = await clientsProvider.editClient(client); diff --git a/lib/screens/filters/add_button.dart b/lib/screens/filters/add_button.dart index fbab84c..7dd4d8c 100644 --- a/lib/screens/filters/add_button.dart +++ b/lib/screens/filters/add_button.dart @@ -32,7 +32,7 @@ class AddFiltersButton extends StatelessWidget { final width = MediaQuery.of(context).size.width; void confirmAddRule(String rule) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingRule); final result = await filteringProvider.addCustomRule(rule); @@ -83,7 +83,7 @@ class AddFiltersButton extends StatelessWidget { } void confirmAddList({required String name, required String url, required String type}) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingList); final result = await filteringProvider.addList(name: name, url: url, type: type); diff --git a/lib/screens/filters/details/list_details_screen.dart b/lib/screens/filters/details/list_details_screen.dart index 8c8199a..b5e305c 100644 --- a/lib/screens/filters/details/list_details_screen.dart +++ b/lib/screens/filters/details/list_details_screen.dart @@ -81,7 +81,7 @@ class _ListDetailsScreenState extends State { required FilteringListActions action, required Filter filterList, }) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open( action == FilteringListActions.edit ? AppLocalizations.of(context)!.savingList @@ -249,7 +249,7 @@ class _ListDetailsScreenState extends State { context: context, builder: (c) => DeleteListModal( onConfirm: () async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.deletingList); final result = await filteringProvider.deleteList( listUrl: list!.url, diff --git a/lib/screens/filters/filters.dart b/lib/screens/filters/filters.dart index 7953b81..c0a7e20 100644 --- a/lib/screens/filters/filters.dart +++ b/lib/screens/filters/filters.dart @@ -51,7 +51,7 @@ class _FiltersState extends State { final width = MediaQuery.of(context).size.width; void updateLists() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.updatingLists); final result = await filteringProvider.updateLists(); if (!mounted) return; @@ -97,7 +97,7 @@ class _FiltersState extends State { } void enableDisableFiltering() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open( statusProvider.serverStatus!.filteringEnabled == true ? AppLocalizations.of(context)!.disableFiltering @@ -125,7 +125,7 @@ class _FiltersState extends State { } void setUpdateFrequency(int value) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.changingUpdateFrequency); final result = await filteringProvider.changeUpdateFrequency(value); @@ -155,7 +155,7 @@ class _FiltersState extends State { } void removeCustomRule(String rule) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.deletingRule); final result = await filteringProvider.removeCustomRule(rule); diff --git a/lib/screens/filters/list_options_menu.dart b/lib/screens/filters/list_options_menu.dart index 853eb7c..2e47d36 100644 --- a/lib/screens/filters/list_options_menu.dart +++ b/lib/screens/filters/list_options_menu.dart @@ -40,7 +40,7 @@ class ListOptionsMenu extends StatelessWidget { final width = MediaQuery.of(context).size.width; void enableDisable() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open( list.enabled == true ? AppLocalizations.of(context)!.disablingList diff --git a/lib/screens/filters/modals/blocked_services_screen.dart b/lib/screens/filters/modals/blocked_services_screen.dart index cefdda5..6169d0b 100644 --- a/lib/screens/filters/modals/blocked_services_screen.dart +++ b/lib/screens/filters/modals/blocked_services_screen.dart @@ -60,7 +60,7 @@ class _BlockedServicesScreenStateWidget extends State { } void updateBlockedServices() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.updating); final result = await filteringProvider.updateBlockedServices(values); diff --git a/lib/screens/filters/selection/selection_screen.dart b/lib/screens/filters/selection/selection_screen.dart index 108544e..cde1f1d 100644 --- a/lib/screens/filters/selection/selection_screen.dart +++ b/lib/screens/filters/selection/selection_screen.dart @@ -76,7 +76,7 @@ class _SelectionScreenState extends State with TickerProviderSt selectedBlacklists: _selectedBlacklists, onDelete: () async { Navigator.pop(context); - final processModal = ProcessModal(context: context); + final processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.processingLists); final result = await filteringProvider.enableDisableMultipleLists( blacklists: _selectedBlacklists, @@ -107,7 +107,7 @@ class _SelectionScreenState extends State with TickerProviderSt selectedBlacklists: _selectedBlacklists, onDelete: () async { Navigator.pop(context); - final processModal = ProcessModal(context: context); + final processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.deletingLists); final result = await filteringProvider.deleteMultipleLists( blacklists: _selectedBlacklists, diff --git a/lib/screens/logs/details/log_details_screen.dart b/lib/screens/logs/details/log_details_screen.dart index 510c2e2..ff88eaa 100644 --- a/lib/screens/logs/details/log_details_screen.dart +++ b/lib/screens/logs/details/log_details_screen.dart @@ -59,7 +59,7 @@ class LogDetailsScreen extends StatelessWidget { } void blockUnblock(String domain, String newStatus) async { - final ProcessModal processModal = ProcessModal(context: context); + final ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingUserFilters); final rules = await statusProvider.blockUnblockDomain( diff --git a/lib/screens/logs/logs_list_appbar.dart b/lib/screens/logs/logs_list_appbar.dart index d2f0ec9..f467d26 100644 --- a/lib/screens/logs/logs_list_appbar.dart +++ b/lib/screens/logs/logs_list_appbar.dart @@ -39,7 +39,7 @@ class LogsListAppBar extends StatelessWidget { final width = MediaQuery.of(context).size.width; void updateConfig(Map data) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.updatingSettings); final result = await serversProvider.apiClient2!.updateQueryLogParameters(data: data); @@ -63,7 +63,7 @@ class LogsListAppBar extends StatelessWidget { } void clearQueries() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.updatingSettings); final result = await serversProvider.apiClient2!.clearLogs(); diff --git a/lib/screens/settings/access_settings/clients_list.dart b/lib/screens/settings/access_settings/clients_list.dart index 4dedc24..0b83a4d 100644 --- a/lib/screens/settings/access_settings/clients_list.dart +++ b/lib/screens/settings/access_settings/clients_list.dart @@ -96,7 +96,7 @@ class _ClientsListState extends State { body['blocked_hosts'] = body['blocked_hosts']!.where((c) => c != client).toList(); } - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.removingClient); final result = await clientsProvider.removeClientList(client, type); @@ -129,7 +129,7 @@ class _ClientsListState extends State { } void confirmAddItem(String item, AccessSettingsList type) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.removingClient); final result = await clientsProvider.addClientList(item, type); diff --git a/lib/screens/settings/dhcp/dhcp.dart b/lib/screens/settings/dhcp/dhcp.dart index dbb4a9a..84a4e76 100644 --- a/lib/screens/settings/dhcp/dhcp.dart +++ b/lib/screens/settings/dhcp/dhcp.dart @@ -192,7 +192,7 @@ class _DhcpScreenState extends State { final width = MediaQuery.of(context).size.width; void saveSettings() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingSettings); final result = await serversProvider.apiClient2!.saveDhcpConfig( data: { @@ -232,7 +232,7 @@ class _DhcpScreenState extends State { void restoreConfig() async { Future.delayed(const Duration(seconds: 0), () async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.restoringConfig); final result = await serversProvider.apiClient2!.resetDhcpConfig(); if (!mounted) return; @@ -257,7 +257,7 @@ class _DhcpScreenState extends State { void restoreLeases() async { Future.delayed(const Duration(seconds: 0), () async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.restoringLeases); final result = await serversProvider.apiClient2!.restoreAllLeases(); diff --git a/lib/screens/settings/dhcp/dhcp_leases.dart b/lib/screens/settings/dhcp/dhcp_leases.dart index d6f5051..91bd1cf 100644 --- a/lib/screens/settings/dhcp/dhcp_leases.dart +++ b/lib/screens/settings/dhcp/dhcp_leases.dart @@ -35,7 +35,7 @@ class DhcpLeases extends StatelessWidget { final width = MediaQuery.of(context).size.width; void deleteLease(Lease lease) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.deleting); final result = await dhcpProvider.deleteLease(lease); @@ -59,7 +59,7 @@ class DhcpLeases extends StatelessWidget { } void createLease(Lease lease) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.creating); final result = await dhcpProvider.createLease(lease); diff --git a/lib/screens/settings/dns/bootstrap_dns.dart b/lib/screens/settings/dns/bootstrap_dns.dart index a439367..2ae3f4f 100644 --- a/lib/screens/settings/dns/bootstrap_dns.dart +++ b/lib/screens/settings/dns/bootstrap_dns.dart @@ -70,7 +70,7 @@ class _BootstrapDnsScreenState extends State { final width = MediaQuery.of(context).size.width; void saveData() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingConfig); final result = await dnsProvider.saveBootstrapDnsConfig({ diff --git a/lib/screens/settings/dns/cache_config.dart b/lib/screens/settings/dns/cache_config.dart index 13d1836..7f6f63a 100644 --- a/lib/screens/settings/dns/cache_config.dart +++ b/lib/screens/settings/dns/cache_config.dart @@ -73,7 +73,7 @@ class _CacheConfigDnsScreenState extends State { final width = MediaQuery.of(context).size.width; void saveData() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingConfig); final result = await dnsProvider.saveCacheCacheConfig({ diff --git a/lib/screens/settings/dns/dns_server_settings.dart b/lib/screens/settings/dns/dns_server_settings.dart index 6602af0..777821f 100644 --- a/lib/screens/settings/dns/dns_server_settings.dart +++ b/lib/screens/settings/dns/dns_server_settings.dart @@ -103,7 +103,7 @@ class _DnsServerSettingsScreenState extends State { final width = MediaQuery.of(context).size.width; void saveData() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingConfig); final result = await dnsProvider.saveDnsServerConfig({ diff --git a/lib/screens/settings/dns/private_reverse_servers.dart b/lib/screens/settings/dns/private_reverse_servers.dart index 98b1cb9..f91c593 100644 --- a/lib/screens/settings/dns/private_reverse_servers.dart +++ b/lib/screens/settings/dns/private_reverse_servers.dart @@ -94,7 +94,7 @@ class _PrivateReverseDnsServersScreenState extends State { } void saveData() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingConfig); final result = await dnsProvider.saveUpstreamDnsConfig({ diff --git a/lib/screens/settings/dns_rewrites/dns_rewrites.dart b/lib/screens/settings/dns_rewrites/dns_rewrites.dart index cd4c8bd..236b107 100644 --- a/lib/screens/settings/dns_rewrites/dns_rewrites.dart +++ b/lib/screens/settings/dns_rewrites/dns_rewrites.dart @@ -59,7 +59,7 @@ class _DnsRewritesScreenState extends State { final width = MediaQuery.of(context).size.width; void deleteDnsRewrite(RewriteRules rule) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.deleting); final result = await rewriteRulesProvider.deleteDnsRewrite(rule); @@ -83,7 +83,7 @@ class _DnsRewritesScreenState extends State { } void addDnsRewrite(RewriteRules rule, _) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.addingRewrite); final result = await rewriteRulesProvider.addDnsRewrite(rule); @@ -107,7 +107,7 @@ class _DnsRewritesScreenState extends State { } void updateRewriteRule(RewriteRules newRule, RewriteRules? previousRule) async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.updatingRule); final result = await rewriteRulesProvider.editDnsRewrite(newRule, previousRule!); diff --git a/lib/screens/settings/encryption/encryption.dart b/lib/screens/settings/encryption/encryption.dart index fc38216..63d9620 100644 --- a/lib/screens/settings/encryption/encryption.dart +++ b/lib/screens/settings/encryption/encryption.dart @@ -201,7 +201,7 @@ class _EncryptionSettingsState extends State { final width = MediaQuery.of(context).size.width; void saveData() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingConfig); final result = await serversProvider.apiClient2!.saveEncryptionSettings( diff --git a/lib/screens/settings/safe_search_settings.dart b/lib/screens/settings/safe_search_settings.dart index 9ef8359..4f6713a 100644 --- a/lib/screens/settings/safe_search_settings.dart +++ b/lib/screens/settings/safe_search_settings.dart @@ -74,7 +74,7 @@ class _SafeSearchSettingsScreenState extends State { final width = MediaQuery.of(context).size.width; void saveConfig() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingSettings); final result = await statusProvider.updateSafeSearchConfig({ diff --git a/lib/screens/settings/update_server/update.dart b/lib/screens/settings/update_server/update.dart index f1c63a8..dd91f6e 100644 --- a/lib/screens/settings/update_server/update.dart +++ b/lib/screens/settings/update_server/update.dart @@ -32,7 +32,7 @@ class UpdateScreen extends StatelessWidget { } void update() async { - ProcessModal processModal = ProcessModal(context: context); + ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.requestingUpdate); final result = await serversProvider.apiClient2!.requestUpdateServer(); diff --git a/lib/widgets/domain_options.dart b/lib/widgets/domain_options.dart index 58409d9..3c4bb79 100644 --- a/lib/widgets/domain_options.dart +++ b/lib/widgets/domain_options.dart @@ -39,7 +39,7 @@ class DomainOptions extends StatelessWidget { final appConfigProvider = Provider.of(context); void blockUnblock(String domain, String newStatus) async { - final ProcessModal processModal = ProcessModal(context: context); + final ProcessModal processModal = ProcessModal(); processModal.open(AppLocalizations.of(context)!.savingUserFilters); final rules = await statusProvider.blockUnblockDomain( diff --git a/lib/widgets/servers_list/server_tile_functions.dart b/lib/widgets/servers_list/server_tile_functions.dart index e3fa4d6..ec3c92e 100644 --- a/lib/widgets/servers_list/server_tile_functions.dart +++ b/lib/widgets/servers_list/server_tile_functions.dart @@ -2,9 +2,13 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:adguard_home_manager/widgets/add_server/unsupported_version_modal.dart'; import 'package:adguard_home_manager/widgets/servers_list/delete_modal.dart'; import 'package:adguard_home_manager/widgets/add_server/add_server_functions.dart'; +import 'package:adguard_home_manager/config/globals.dart'; +import 'package:adguard_home_manager/config/minimum_server_version.dart'; +import 'package:adguard_home_manager/functions/compare_versions.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/models/server_status.dart'; @@ -71,7 +75,7 @@ void connectToServer({ required BuildContext context, required Server server }) async { - final ProcessModal process = ProcessModal(context: context); + final ProcessModal process = ProcessModal(); process.open(AppLocalizations.of(context)!.connecting); final result = server.runningOnHa == true @@ -84,13 +88,35 @@ void connectToServer({ final ApiClientV2 apiClient2 = ApiClientV2(server: server); serversProvider.setApiClient2(apiClient2); - serversProvider.setSelectedServer(server); statusProvider.setServerStatusLoad(LoadStatus.loading); final serverStatus = await apiClient2.getServerStatus(); if (serverStatus.successful == true) { + final status = serverStatus.content as ServerStatus; + + // Check if server version is supported + final validVersion = serverVersionIsAhead( + currentVersion: status.serverVersion, + referenceVersion: MinimumServerVersion.stable, + referenceVersionBeta: MinimumServerVersion.beta + ); + if (validVersion == false) { + process.close(); + showDialog( + context: globalNavigatorKey.currentContext!, + builder: (ctx) => UnsupportedVersionModal( + serverVersion: status.serverVersion, + onClose: () { + serversProvider.setSelectedServer(null); + } + ) + ); + return; + } + + serversProvider.setSelectedServer(server); statusProvider.setServerStatusData( - data: serverStatus.content as ServerStatus + data: status ); serversProvider.checkServerUpdatesAvailable( server: server, diff --git a/lib/widgets/servers_list/servers_list_item.dart b/lib/widgets/servers_list/servers_list_item.dart index e67b436..d3149c1 100644 --- a/lib/widgets/servers_list/servers_list_item.dart +++ b/lib/widgets/servers_list/servers_list_item.dart @@ -96,7 +96,7 @@ class _ServersListItemState extends State with SingleTickerProv } void connectToServer(Server server) async { - final ProcessModal process = ProcessModal(context: context); + final ProcessModal process = ProcessModal(); process.open(AppLocalizations.of(context)!.connecting); final result = server.runningOnHa == true