Improved server version check

This commit is contained in:
Juan Gilsanz Polo 2023-11-20 15:16:20 +01:00
parent c2af933eb5
commit 34bff2f506
29 changed files with 77 additions and 57 deletions

View file

@ -1,20 +1,14 @@
import 'package:adguard_home_manager/config/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:adguard_home_manager/widgets/process_dialog.dart'; import 'package:adguard_home_manager/widgets/process_dialog.dart';
class ProcessModal { class ProcessModal {
late BuildContext context;
ProcessModal({
required this.context
});
void open(String message) async { void open(String message) async {
await Future.delayed(const Duration(seconds: 0), () => { await Future.delayed(const Duration(seconds: 0), () => {
showDialog( showDialog(
context: context, context: globalNavigatorKey.currentContext!,
builder: (c) { builder: (ctx) {
context = c;
return ProcessDialog( return ProcessDialog(
message: message, message: message,
); );
@ -26,6 +20,6 @@ class ProcessModal {
} }
void close() { void close() {
Navigator.pop(context); Navigator.pop(globalNavigatorKey.currentContext!);
} }
} }

View file

@ -12,7 +12,7 @@ import 'package:adguard_home_manager/models/server.dart';
Future<ApiResponse> clearDnsCache(BuildContext context, Server server) async { Future<ApiResponse> clearDnsCache(BuildContext context, Server server) async {
final serversProvider = Provider.of<ServersProvider>(context, listen: false); final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final ProcessModal processModal = ProcessModal(context: context); final ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.clearingDnsCache); processModal.open(AppLocalizations.of(context)!.clearingDnsCache);
final result = await serversProvider.apiClient2!.resetDnsCache(); final result = await serversProvider.apiClient2!.resetDnsCache();

View file

@ -237,7 +237,8 @@ class StatusProvider with ChangeNotifier {
} }
Future<bool> getServerStatus({ Future<bool> getServerStatus({
bool? withLoadingIndicator bool? withLoadingIndicator,
bool? overrideCheckServerVersion
}) async { }) async {
if (withLoadingIndicator == true) { if (withLoadingIndicator == true) {
_loadStatus = LoadStatus.loading; _loadStatus = LoadStatus.loading;
@ -258,7 +259,7 @@ class StatusProvider with ChangeNotifier {
referenceVersion: MinimumServerVersion.stable, referenceVersion: MinimumServerVersion.stable,
referenceVersionBeta: MinimumServerVersion.beta referenceVersionBeta: MinimumServerVersion.beta
); );
if (validVersion == false) { if (validVersion == false && overrideCheckServerVersion != true) {
showDialog( showDialog(
context: globalNavigatorKey.currentContext!, context: globalNavigatorKey.currentContext!,
builder: (ctx) => UnsupportedVersionModal( builder: (ctx) => UnsupportedVersionModal(
@ -269,7 +270,6 @@ class StatusProvider with ChangeNotifier {
) )
); );
} }
return true; return true;
} }
else { else {

View file

@ -75,7 +75,7 @@ class _AddedListState extends State<AddedList> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void confirmEditClient(Client client) async { void confirmEditClient(Client client) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.addingClient); processModal.open(AppLocalizations.of(context)!.addingClient);
final result = await clientsProvider.editClient(client); final result = await clientsProvider.editClient(client);
@ -99,7 +99,7 @@ class _AddedListState extends State<AddedList> {
} }
void deleteClient(Client client) async { void deleteClient(Client client) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.removingClient); processModal.open(AppLocalizations.of(context)!.removingClient);
final result = await clientsProvider.deleteClient(client); final result = await clientsProvider.deleteClient(client);

View file

@ -25,7 +25,7 @@ class ClientsFab extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void confirmAddClient(Client client) async { void confirmAddClient(Client client) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.addingClient); processModal.open(AppLocalizations.of(context)!.addingClient);
final result = await clientsProvider.addClient(client); final result = await clientsProvider.addClient(client);

View file

@ -86,7 +86,7 @@ class _SearchClientsState extends State<SearchClients> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void deleteClient(Client client) async { void deleteClient(Client client) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.removingClient); processModal.open(AppLocalizations.of(context)!.removingClient);
final result = await clientsProvider.deleteClient(client); final result = await clientsProvider.deleteClient(client);
@ -110,7 +110,7 @@ class _SearchClientsState extends State<SearchClients> {
} }
void confirmEditClient(Client client) async { void confirmEditClient(Client client) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.addingClient); processModal.open(AppLocalizations.of(context)!.addingClient);
final result = await clientsProvider.editClient(client); final result = await clientsProvider.editClient(client);

View file

@ -32,7 +32,7 @@ class AddFiltersButton extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void confirmAddRule(String rule) async { void confirmAddRule(String rule) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.addingRule); processModal.open(AppLocalizations.of(context)!.addingRule);
final result = await filteringProvider.addCustomRule(rule); 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 { 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); processModal.open(AppLocalizations.of(context)!.addingList);
final result = await filteringProvider.addList(name: name, url: url, type: type); final result = await filteringProvider.addList(name: name, url: url, type: type);

View file

@ -81,7 +81,7 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
required FilteringListActions action, required FilteringListActions action,
required Filter filterList, required Filter filterList,
}) async { }) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open( processModal.open(
action == FilteringListActions.edit action == FilteringListActions.edit
? AppLocalizations.of(context)!.savingList ? AppLocalizations.of(context)!.savingList
@ -249,7 +249,7 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
context: context, context: context,
builder: (c) => DeleteListModal( builder: (c) => DeleteListModal(
onConfirm: () async { onConfirm: () async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.deletingList); processModal.open(AppLocalizations.of(context)!.deletingList);
final result = await filteringProvider.deleteList( final result = await filteringProvider.deleteList(
listUrl: list!.url, listUrl: list!.url,

View file

@ -51,7 +51,7 @@ class _FiltersState extends State<Filters> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void updateLists() async { void updateLists() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.updatingLists); processModal.open(AppLocalizations.of(context)!.updatingLists);
final result = await filteringProvider.updateLists(); final result = await filteringProvider.updateLists();
if (!mounted) return; if (!mounted) return;
@ -97,7 +97,7 @@ class _FiltersState extends State<Filters> {
} }
void enableDisableFiltering() async { void enableDisableFiltering() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open( processModal.open(
statusProvider.serverStatus!.filteringEnabled == true statusProvider.serverStatus!.filteringEnabled == true
? AppLocalizations.of(context)!.disableFiltering ? AppLocalizations.of(context)!.disableFiltering
@ -125,7 +125,7 @@ class _FiltersState extends State<Filters> {
} }
void setUpdateFrequency(int value) async { void setUpdateFrequency(int value) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.changingUpdateFrequency); processModal.open(AppLocalizations.of(context)!.changingUpdateFrequency);
final result = await filteringProvider.changeUpdateFrequency(value); final result = await filteringProvider.changeUpdateFrequency(value);
@ -155,7 +155,7 @@ class _FiltersState extends State<Filters> {
} }
void removeCustomRule(String rule) async { void removeCustomRule(String rule) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.deletingRule); processModal.open(AppLocalizations.of(context)!.deletingRule);
final result = await filteringProvider.removeCustomRule(rule); final result = await filteringProvider.removeCustomRule(rule);

View file

@ -40,7 +40,7 @@ class ListOptionsMenu extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void enableDisable() async { void enableDisable() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open( processModal.open(
list.enabled == true list.enabled == true
? AppLocalizations.of(context)!.disablingList ? AppLocalizations.of(context)!.disablingList

View file

@ -60,7 +60,7 @@ class _BlockedServicesScreenStateWidget extends State<BlockedServicesScreen> {
} }
void updateBlockedServices() async { void updateBlockedServices() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.updating); processModal.open(AppLocalizations.of(context)!.updating);
final result = await filteringProvider.updateBlockedServices(values); final result = await filteringProvider.updateBlockedServices(values);

View file

@ -76,7 +76,7 @@ class _SelectionScreenState extends State<SelectionScreen> with TickerProviderSt
selectedBlacklists: _selectedBlacklists, selectedBlacklists: _selectedBlacklists,
onDelete: () async { onDelete: () async {
Navigator.pop(context); Navigator.pop(context);
final processModal = ProcessModal(context: context); final processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.processingLists); processModal.open(AppLocalizations.of(context)!.processingLists);
final result = await filteringProvider.enableDisableMultipleLists( final result = await filteringProvider.enableDisableMultipleLists(
blacklists: _selectedBlacklists, blacklists: _selectedBlacklists,
@ -107,7 +107,7 @@ class _SelectionScreenState extends State<SelectionScreen> with TickerProviderSt
selectedBlacklists: _selectedBlacklists, selectedBlacklists: _selectedBlacklists,
onDelete: () async { onDelete: () async {
Navigator.pop(context); Navigator.pop(context);
final processModal = ProcessModal(context: context); final processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.deletingLists); processModal.open(AppLocalizations.of(context)!.deletingLists);
final result = await filteringProvider.deleteMultipleLists( final result = await filteringProvider.deleteMultipleLists(
blacklists: _selectedBlacklists, blacklists: _selectedBlacklists,

View file

@ -59,7 +59,7 @@ class LogDetailsScreen extends StatelessWidget {
} }
void blockUnblock(String domain, String newStatus) async { void blockUnblock(String domain, String newStatus) async {
final ProcessModal processModal = ProcessModal(context: context); final ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingUserFilters); processModal.open(AppLocalizations.of(context)!.savingUserFilters);
final rules = await statusProvider.blockUnblockDomain( final rules = await statusProvider.blockUnblockDomain(

View file

@ -39,7 +39,7 @@ class LogsListAppBar extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void updateConfig(Map<String, dynamic> data) async { void updateConfig(Map<String, dynamic> data) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.updatingSettings); processModal.open(AppLocalizations.of(context)!.updatingSettings);
final result = await serversProvider.apiClient2!.updateQueryLogParameters(data: data); final result = await serversProvider.apiClient2!.updateQueryLogParameters(data: data);
@ -63,7 +63,7 @@ class LogsListAppBar extends StatelessWidget {
} }
void clearQueries() async { void clearQueries() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.updatingSettings); processModal.open(AppLocalizations.of(context)!.updatingSettings);
final result = await serversProvider.apiClient2!.clearLogs(); final result = await serversProvider.apiClient2!.clearLogs();

View file

@ -96,7 +96,7 @@ class _ClientsListState extends State<ClientsList> {
body['blocked_hosts'] = body['blocked_hosts']!.where((c) => c != client).toList(); 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); processModal.open(AppLocalizations.of(context)!.removingClient);
final result = await clientsProvider.removeClientList(client, type); final result = await clientsProvider.removeClientList(client, type);
@ -129,7 +129,7 @@ class _ClientsListState extends State<ClientsList> {
} }
void confirmAddItem(String item, AccessSettingsList type) async { void confirmAddItem(String item, AccessSettingsList type) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.removingClient); processModal.open(AppLocalizations.of(context)!.removingClient);
final result = await clientsProvider.addClientList(item, type); final result = await clientsProvider.addClientList(item, type);

View file

@ -192,7 +192,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveSettings() async { void saveSettings() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingSettings); processModal.open(AppLocalizations.of(context)!.savingSettings);
final result = await serversProvider.apiClient2!.saveDhcpConfig( final result = await serversProvider.apiClient2!.saveDhcpConfig(
data: { data: {
@ -232,7 +232,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
void restoreConfig() async { void restoreConfig() async {
Future.delayed(const Duration(seconds: 0), () async { Future.delayed(const Duration(seconds: 0), () async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.restoringConfig); processModal.open(AppLocalizations.of(context)!.restoringConfig);
final result = await serversProvider.apiClient2!.resetDhcpConfig(); final result = await serversProvider.apiClient2!.resetDhcpConfig();
if (!mounted) return; if (!mounted) return;
@ -257,7 +257,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
void restoreLeases() async { void restoreLeases() async {
Future.delayed(const Duration(seconds: 0), () async { Future.delayed(const Duration(seconds: 0), () async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.restoringLeases); processModal.open(AppLocalizations.of(context)!.restoringLeases);
final result = await serversProvider.apiClient2!.restoreAllLeases(); final result = await serversProvider.apiClient2!.restoreAllLeases();

View file

@ -35,7 +35,7 @@ class DhcpLeases extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void deleteLease(Lease lease) async { void deleteLease(Lease lease) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.deleting); processModal.open(AppLocalizations.of(context)!.deleting);
final result = await dhcpProvider.deleteLease(lease); final result = await dhcpProvider.deleteLease(lease);
@ -59,7 +59,7 @@ class DhcpLeases extends StatelessWidget {
} }
void createLease(Lease lease) async { void createLease(Lease lease) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.creating); processModal.open(AppLocalizations.of(context)!.creating);
final result = await dhcpProvider.createLease(lease); final result = await dhcpProvider.createLease(lease);

View file

@ -70,7 +70,7 @@ class _BootstrapDnsScreenState extends State<BootstrapDnsScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await dnsProvider.saveBootstrapDnsConfig({ final result = await dnsProvider.saveBootstrapDnsConfig({

View file

@ -73,7 +73,7 @@ class _CacheConfigDnsScreenState extends State<CacheConfigDnsScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await dnsProvider.saveCacheCacheConfig({ final result = await dnsProvider.saveCacheCacheConfig({

View file

@ -103,7 +103,7 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await dnsProvider.saveDnsServerConfig({ final result = await dnsProvider.saveDnsServerConfig({

View file

@ -94,7 +94,7 @@ class _PrivateReverseDnsServersScreenState extends State<PrivateReverseDnsServer
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await dnsProvider.savePrivateReverseServersConfig( final result = await dnsProvider.savePrivateReverseServersConfig(

View file

@ -141,7 +141,7 @@ class _UpstreamDnsScreenState extends State<UpstreamDnsScreen> {
} }
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await dnsProvider.saveUpstreamDnsConfig({ final result = await dnsProvider.saveUpstreamDnsConfig({

View file

@ -59,7 +59,7 @@ class _DnsRewritesScreenState extends State<DnsRewritesScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void deleteDnsRewrite(RewriteRules rule) async { void deleteDnsRewrite(RewriteRules rule) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.deleting); processModal.open(AppLocalizations.of(context)!.deleting);
final result = await rewriteRulesProvider.deleteDnsRewrite(rule); final result = await rewriteRulesProvider.deleteDnsRewrite(rule);
@ -83,7 +83,7 @@ class _DnsRewritesScreenState extends State<DnsRewritesScreen> {
} }
void addDnsRewrite(RewriteRules rule, _) async { void addDnsRewrite(RewriteRules rule, _) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.addingRewrite); processModal.open(AppLocalizations.of(context)!.addingRewrite);
final result = await rewriteRulesProvider.addDnsRewrite(rule); final result = await rewriteRulesProvider.addDnsRewrite(rule);
@ -107,7 +107,7 @@ class _DnsRewritesScreenState extends State<DnsRewritesScreen> {
} }
void updateRewriteRule(RewriteRules newRule, RewriteRules? previousRule) async { void updateRewriteRule(RewriteRules newRule, RewriteRules? previousRule) async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.updatingRule); processModal.open(AppLocalizations.of(context)!.updatingRule);
final result = await rewriteRulesProvider.editDnsRewrite(newRule, previousRule!); final result = await rewriteRulesProvider.editDnsRewrite(newRule, previousRule!);

View file

@ -201,7 +201,7 @@ class _EncryptionSettingsState extends State<EncryptionSettings> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveData() async { void saveData() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingConfig); processModal.open(AppLocalizations.of(context)!.savingConfig);
final result = await serversProvider.apiClient2!.saveEncryptionSettings( final result = await serversProvider.apiClient2!.saveEncryptionSettings(

View file

@ -74,7 +74,7 @@ class _SafeSearchSettingsScreenState extends State<SafeSearchSettingsScreen> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
void saveConfig() async { void saveConfig() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingSettings); processModal.open(AppLocalizations.of(context)!.savingSettings);
final result = await statusProvider.updateSafeSearchConfig({ final result = await statusProvider.updateSafeSearchConfig({

View file

@ -32,7 +32,7 @@ class UpdateScreen extends StatelessWidget {
} }
void update() async { void update() async {
ProcessModal processModal = ProcessModal(context: context); ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.requestingUpdate); processModal.open(AppLocalizations.of(context)!.requestingUpdate);
final result = await serversProvider.apiClient2!.requestUpdateServer(); final result = await serversProvider.apiClient2!.requestUpdateServer();

View file

@ -39,7 +39,7 @@ class DomainOptions extends StatelessWidget {
final appConfigProvider = Provider.of<AppConfigProvider>(context); final appConfigProvider = Provider.of<AppConfigProvider>(context);
void blockUnblock(String domain, String newStatus) async { void blockUnblock(String domain, String newStatus) async {
final ProcessModal processModal = ProcessModal(context: context); final ProcessModal processModal = ProcessModal();
processModal.open(AppLocalizations.of(context)!.savingUserFilters); processModal.open(AppLocalizations.of(context)!.savingUserFilters);
final rules = await statusProvider.blockUnblockDomain( final rules = await statusProvider.blockUnblockDomain(

View file

@ -2,9 +2,13 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.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/widgets/add_server/unsupported_version_modal.dart';
import 'package:adguard_home_manager/widgets/servers_list/delete_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/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/constants/enums.dart';
import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/models/server_status.dart'; import 'package:adguard_home_manager/models/server_status.dart';
@ -71,7 +75,7 @@ void connectToServer({
required BuildContext context, required BuildContext context,
required Server server required Server server
}) async { }) async {
final ProcessModal process = ProcessModal(context: context); final ProcessModal process = ProcessModal();
process.open(AppLocalizations.of(context)!.connecting); process.open(AppLocalizations.of(context)!.connecting);
final result = server.runningOnHa == true final result = server.runningOnHa == true
@ -84,13 +88,35 @@ void connectToServer({
final ApiClientV2 apiClient2 = ApiClientV2(server: server); final ApiClientV2 apiClient2 = ApiClientV2(server: server);
serversProvider.setApiClient2(apiClient2); serversProvider.setApiClient2(apiClient2);
serversProvider.setSelectedServer(server);
statusProvider.setServerStatusLoad(LoadStatus.loading); statusProvider.setServerStatusLoad(LoadStatus.loading);
final serverStatus = await apiClient2.getServerStatus(); final serverStatus = await apiClient2.getServerStatus();
if (serverStatus.successful == true) { 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( statusProvider.setServerStatusData(
data: serverStatus.content as ServerStatus data: status
); );
serversProvider.checkServerUpdatesAvailable( serversProvider.checkServerUpdatesAvailable(
server: server, server: server,

View file

@ -96,7 +96,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
} }
void connectToServer(Server server) async { void connectToServer(Server server) async {
final ProcessModal process = ProcessModal(context: context); final ProcessModal process = ProcessModal();
process.open(AppLocalizations.of(context)!.connecting); process.open(AppLocalizations.of(context)!.connecting);
final result = server.runningOnHa == true final result = server.runningOnHa == true