diff --git a/lib/models/update_available.dart b/lib/models/update_available.dart index 2b2aca6..136a6b9 100644 --- a/lib/models/update_available.dart +++ b/lib/models/update_available.dart @@ -12,7 +12,7 @@ class UpdateAvailable { class UpdateAvailableData { String currentVersion; - final String newVersion; + String? newVersion; final String announcement; final String announcementUrl; final bool canAutoupdate; @@ -22,7 +22,7 @@ class UpdateAvailableData { UpdateAvailableData({ required this.currentVersion, - required this.newVersion, + this.newVersion, required this.announcement, required this.announcementUrl, required this.canAutoupdate, diff --git a/lib/providers/servers_provider.dart b/lib/providers/servers_provider.dart index 1695049..b02a154 100644 --- a/lib/providers/servers_provider.dart +++ b/lib/providers/servers_provider.dart @@ -487,22 +487,28 @@ class ServersProvider with ChangeNotifier { setUpdateAvailableLoadStatus(LoadStatus.loading, true); final result = await checkServerUpdates(server: server); if (result['result'] == 'success') { - UpdateAvailableData data = result['data']; - final gitHubResult = await getUpdateChangelog(server: server, releaseTag: data.newVersion); - if (gitHubResult['result'] == 'success') { - data.changelog = gitHubResult['body']; + try { + UpdateAvailableData data = UpdateAvailableData.fromJson(result['data']); + final gitHubResult = await getUpdateChangelog(server: server, releaseTag: data.newVersion ?? data.currentVersion); + if (gitHubResult['result'] == 'success') { + data.changelog = gitHubResult['body']; + } + data.updateAvailable = data.newVersion != null + ? data.newVersion!.contains('b') + ? compareBetaVersions( + currentVersion: data.currentVersion.replaceAll('v', ''), + newVersion: data.newVersion!.replaceAll('v', ''), + ) + : compareVersions( + currentVersion: data.currentVersion.replaceAll('v', ''), + newVersion: data.newVersion!.replaceAll('v', ''), + ) + : false; + setUpdateAvailableData(data); + setUpdateAvailableLoadStatus(LoadStatus.loaded, true); + } catch (_) { + // AUTO UPDATE NOT AVAILABLE // } - data.updateAvailable = data.newVersion.contains('b') - ? compareBetaVersions( - currentVersion: data.currentVersion.replaceAll('v', ''), - newVersion: data.newVersion.replaceAll('v', ''), - ) - : compareVersions( - currentVersion: data.currentVersion.replaceAll('v', ''), - newVersion: data.newVersion.replaceAll('v', ''), - ); - setUpdateAvailableData(data); - setUpdateAvailableLoadStatus(LoadStatus.loaded, true); } else { setUpdateAvailableLoadStatus(LoadStatus.error, true); diff --git a/lib/screens/settings/settings.dart b/lib/screens/settings/settings.dart index 5f805ec..ea39f97 100644 --- a/lib/screens/settings/settings.dart +++ b/lib/screens/settings/settings.dart @@ -109,7 +109,7 @@ class Settings extends StatelessWidget { ) }, ), - CustomListTile( + if (serversProvider.updateAvailable.data != null) CustomListTile( icon: Icons.system_update_rounded, title: AppLocalizations.of(context)!.updates, subtitle: AppLocalizations.of(context)!.updatesDescription, diff --git a/lib/screens/settings/update_server/update.dart b/lib/screens/settings/update_server/update.dart index 682eebc..5fa898e 100644 --- a/lib/screens/settings/update_server/update.dart +++ b/lib/screens/settings/update_server/update.dart @@ -41,7 +41,7 @@ class UpdateScreen extends StatelessWidget { processModal.close(); if (result['result'] == 'success') { - serversProvider.clearUpdateAvailable(serversProvider.selectedServer!, serversProvider.updateAvailable.data!.newVersion); + serversProvider.clearUpdateAvailable(serversProvider.selectedServer!, serversProvider.updateAvailable.data!.newVersion!); showSnacbkar( context: context, appConfigProvider: appConfigProvider, @@ -140,7 +140,7 @@ class UpdateScreen extends StatelessWidget { Text( serversProvider.updateAvailable.data!.updateAvailable != null ? serversProvider.updateAvailable.data!.updateAvailable == true - ? serversProvider.updateAvailable.data!.newVersion + ? serversProvider.updateAvailable.data!.newVersion ?? 'N/A' : serversProvider.updateAvailable.data!.currentVersion : "N/A", style: TextStyle( @@ -156,7 +156,7 @@ class UpdateScreen extends StatelessWidget { icon: const Icon(Icons.download_rounded), label: Text(AppLocalizations.of(context)!.updateNow), onPressed: serversProvider.updateAvailable.data!.updateAvailable != null && serversProvider.updateAvailable.data!.updateAvailable == true - ? serversProvider.updateAvailable.data!.canAutoupdate == true + ? serversProvider.updateAvailable.data!.canAutoupdate != null && serversProvider.updateAvailable.data!.canAutoupdate == true ? () => update() : () => showAutoUpdateUnavailableModal() : null @@ -252,7 +252,7 @@ class UpdateScreen extends StatelessWidget { Text( serversProvider.updateAvailable.data!.updateAvailable != null ? serversProvider.updateAvailable.data!.updateAvailable == true - ? serversProvider.updateAvailable.data!.newVersion + ? serversProvider.updateAvailable.data!.newVersion ?? 'N/A' : serversProvider.updateAvailable.data!.currentVersion : "N/A", style: TextStyle( @@ -290,7 +290,9 @@ class UpdateScreen extends StatelessWidget { Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Text( - "Changelog ${serversProvider.updateAvailable.data!.newVersion}", + "Changelog ${serversProvider.updateAvailable.data!.updateAvailable == true + ? serversProvider.updateAvailable.data!.newVersion + : serversProvider.updateAvailable.data!.currentVersion}", style: TextStyle( fontSize: 20, fontWeight: FontWeight.w500, diff --git a/lib/services/http_requests.dart b/lib/services/http_requests.dart index 2962937..27780f6 100644 --- a/lib/services/http_requests.dart +++ b/lib/services/http_requests.dart @@ -1994,7 +1994,7 @@ Future checkServerUpdates({ }; return { 'result': 'success', - 'data': UpdateAvailableData.fromJson(obj) + 'data': obj }; } else {