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: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!);
}
}

View file

@ -12,7 +12,7 @@ import 'package:adguard_home_manager/models/server.dart';
Future<ApiResponse> clearDnsCache(BuildContext context, Server server) async {
final serversProvider = Provider.of<ServersProvider>(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();

View file

@ -237,7 +237,8 @@ class StatusProvider with ChangeNotifier {
}
Future<bool> 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 {

View file

@ -75,7 +75,7 @@ class _AddedListState extends State<AddedList> {
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<AddedList> {
}
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);

View file

@ -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);

View file

@ -86,7 +86,7 @@ class _SearchClientsState extends State<SearchClients> {
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<SearchClients> {
}
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);

View file

@ -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);

View file

@ -81,7 +81,7 @@ class _ListDetailsScreenState extends State<ListDetailsScreen> {
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<ListDetailsScreen> {
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,

View file

@ -51,7 +51,7 @@ class _FiltersState extends State<Filters> {
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<Filters> {
}
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<Filters> {
}
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<Filters> {
}
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);

View file

@ -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

View file

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

View file

@ -76,7 +76,7 @@ class _SelectionScreenState extends State<SelectionScreen> 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<SelectionScreen> 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,

View file

@ -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(

View file

@ -39,7 +39,7 @@ class LogsListAppBar extends StatelessWidget {
final width = MediaQuery.of(context).size.width;
void updateConfig(Map<String, dynamic> 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();

View file

@ -96,7 +96,7 @@ class _ClientsListState extends State<ClientsList> {
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<ClientsList> {
}
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);

View file

@ -192,7 +192,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
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<DhcpScreen> {
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<DhcpScreen> {
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();

View file

@ -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);

View file

@ -70,7 +70,7 @@ class _BootstrapDnsScreenState extends State<BootstrapDnsScreen> {
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({

View file

@ -73,7 +73,7 @@ class _CacheConfigDnsScreenState extends State<CacheConfigDnsScreen> {
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({

View file

@ -103,7 +103,7 @@ class _DnsServerSettingsScreenState extends State<DnsServerSettingsScreen> {
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({

View file

@ -94,7 +94,7 @@ class _PrivateReverseDnsServersScreenState extends State<PrivateReverseDnsServer
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.savePrivateReverseServersConfig(

View file

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

View file

@ -59,7 +59,7 @@ class _DnsRewritesScreenState extends State<DnsRewritesScreen> {
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<DnsRewritesScreen> {
}
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<DnsRewritesScreen> {
}
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!);

View file

@ -201,7 +201,7 @@ class _EncryptionSettingsState extends State<EncryptionSettings> {
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(

View file

@ -74,7 +74,7 @@ class _SafeSearchSettingsScreenState extends State<SafeSearchSettingsScreen> {
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({

View file

@ -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();

View file

@ -39,7 +39,7 @@ class DomainOptions extends StatelessWidget {
final appConfigProvider = Provider.of<AppConfigProvider>(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(

View file

@ -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,

View file

@ -96,7 +96,7 @@ class _ServersListItemState extends State<ServersListItem> 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