From d6e3d16dffc1e7cf784217facc63aa7f4ec66ba6 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Thu, 8 Jun 2023 16:27:51 +0200 Subject: [PATCH] Fixed server updater --- lib/functions/compare_versions.dart | 2 +- lib/providers/servers_provider.dart | 42 ++++++++++++++++--- .../settings/update_server/update.dart | 6 ++- .../servers_list/servers_list_item.dart | 5 ++- .../servers_list/servers_tile_item.dart | 5 ++- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/lib/functions/compare_versions.dart b/lib/functions/compare_versions.dart index a8005e6..33ae8fe 100644 --- a/lib/functions/compare_versions.dart +++ b/lib/functions/compare_versions.dart @@ -39,7 +39,7 @@ bool compareVersions({ } else { // stable final current = currentVersion.replaceAll('v', ''); - final newV = currentVersion.replaceAll('v', ''); + final newV = newVersion.replaceAll('v', ''); final currentSplit = current.split('.').map((e) => int.parse(e)).toList(); final newSplit = newV.split('.').map((e) => int.parse(e)).toList(); diff --git a/lib/providers/servers_provider.dart b/lib/providers/servers_provider.dart index 4b45394..f558675 100644 --- a/lib/providers/servers_provider.dart +++ b/lib/providers/servers_provider.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:sqflite/sqflite.dart'; @@ -155,8 +157,11 @@ class ServersProvider with ChangeNotifier { } } - void checkServerUpdatesAvailable(Server server) async { - setUpdateAvailableLoadStatus(LoadStatus.loading, true); + void checkServerUpdatesAvailable({ + required Server server, + bool? setValues + }) async { + if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.loading, true); final result = await _apiClient!.checkServerUpdates(); if (result['result'] == 'success') { UpdateAvailableData data = UpdateAvailableData.fromJson(result['data']); @@ -170,11 +175,16 @@ class ServersProvider with ChangeNotifier { newVersion: data.newVersion!, ) : false; - setUpdateAvailableData(data); - setUpdateAvailableLoadStatus(LoadStatus.loaded, true); + if (setValues == true) { + setUpdateAvailableData(data); + } + else { + if (data.currentVersion == data.newVersion) setUpdateAvailableData(data); + } + if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.loaded, true); } else { - setUpdateAvailableLoadStatus(LoadStatus.error, true); + if (setValues == true) setUpdateAvailableLoadStatus(LoadStatus.error, true); } } @@ -189,7 +199,10 @@ class ServersProvider with ChangeNotifier { Future initializateServer(Server server) async { final serverStatus = await _apiClient!.getServerStatus(); if (serverStatus['result'] == 'success') { - checkServerUpdatesAvailable(server); // Do not await + checkServerUpdatesAvailable( + server: server, + setValues: true + ); // Do not await } } @@ -229,4 +242,21 @@ class ServersProvider with ChangeNotifier { return null; } } + + void recheckPeriodServerUpdated() { + if (_selectedServer != null) { + Server server = _selectedServer!; + Timer.periodic( + const Duration(seconds: 2), + (timer) { + if (_selectedServer != null && _selectedServer == server) { + checkServerUpdatesAvailable(server: server, setValues: false); + } + else { + timer.cancel(); + } + } + ); + } + } } \ No newline at end of file diff --git a/lib/screens/settings/update_server/update.dart b/lib/screens/settings/update_server/update.dart index f84e01a..78a8a0e 100644 --- a/lib/screens/settings/update_server/update.dart +++ b/lib/screens/settings/update_server/update.dart @@ -41,6 +41,7 @@ class UpdateScreen extends StatelessWidget { if (result['result'] == 'success') { serversProvider.clearUpdateAvailable(serversProvider.selectedServer!, serversProvider.updateAvailable.data!.newVersion!); + serversProvider.recheckPeriodServerUpdated(); showSnacbkar( appConfigProvider: appConfigProvider, label: AppLocalizations.of(context)!.requestStartUpdateSuccessful, @@ -79,7 +80,10 @@ class UpdateScreen extends StatelessWidget { color: Theme.of(context).colorScheme.onSurfaceVariant, ), tooltip: AppLocalizations.of(context)!.checkUpdates, - onPressed: () => serversProvider.checkServerUpdatesAvailable(serversProvider.selectedServer!) + onPressed: () => serversProvider.checkServerUpdatesAvailable( + server: serversProvider.selectedServer!, + setValues: true + ) ), ], ), diff --git a/lib/widgets/servers_list/servers_list_item.dart b/lib/widgets/servers_list/servers_list_item.dart index fb3364e..5d269d1 100644 --- a/lib/widgets/servers_list/servers_list_item.dart +++ b/lib/widgets/servers_list/servers_list_item.dart @@ -145,7 +145,10 @@ class _ServersListItemState extends State with SingleTickerProv statusProvider.setServerStatusData( data: serverStatus['data'] ); - serversProvider.checkServerUpdatesAvailable(server); + serversProvider.checkServerUpdatesAvailable( + server: server, + setValues: true + ); statusProvider.setServerStatusLoad(LoadStatus.loaded); } else { diff --git a/lib/widgets/servers_list/servers_tile_item.dart b/lib/widgets/servers_list/servers_tile_item.dart index fd274d6..7a8be69 100644 --- a/lib/widgets/servers_list/servers_tile_item.dart +++ b/lib/widgets/servers_list/servers_tile_item.dart @@ -112,7 +112,10 @@ class _ServersTileItemState extends State with SingleTickerProv statusProvider.setServerStatusData( data: serverStatus['data'] ); - serversProvider.checkServerUpdatesAvailable(server); + serversProvider.checkServerUpdatesAvailable( + server: server, + setValues: true + ); statusProvider.setServerStatusLoad(LoadStatus.loaded); } else {