From 7416bbf6d12ae56b07377ad5738fbc21b8f862cf Mon Sep 17 00:00:00 2001 From: susch19 Date: Mon, 23 Oct 2023 17:52:05 +0200 Subject: [PATCH] Fixed problems with updater * since it opened the url in the app instead of in the browser and this seems to not work * fixed versioning check, because latest tag might not be latest published release, so we should extract the version of the tagname from the release --- lib/helper/helper_methods.dart | 2 +- lib/helper/update_manager.dart | 51 ++++++++++++---------------------- pubspec.yaml | 2 +- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/lib/helper/helper_methods.dart b/lib/helper/helper_methods.dart index 86f1e3f..c1bf63a 100644 --- a/lib/helper/helper_methods.dart +++ b/lib/helper/helper_methods.dart @@ -2,6 +2,6 @@ import 'package:url_launcher/url_launcher_string.dart'; class HelperMethods { static void openUrl(final String url) async { - await launchUrlString(url); + await launchUrlString(url, mode: LaunchMode.externalApplication); } } diff --git a/lib/helper/update_manager.dart b/lib/helper/update_manager.dart index f17c2b2..01c6dfb 100644 --- a/lib/helper/update_manager.dart +++ b/lib/helper/update_manager.dart @@ -17,7 +17,7 @@ final versionAndUrlProvider = StateNotifierProvider { - static final Version version = Version(1, 2, 2); + static final Version version = Version(1, 2, 3); static const int checkEveryHours = 16; static final GitHub gitHub = GitHub(); static final RepositorySlug repositorySlug = RepositorySlug("susch19", "SmartHome"); @@ -115,51 +115,36 @@ class UpdateManager extends StateNotifier { return v; } - static Future isNewVersionAvailable() async { - final newVersion = await _getNewVersion(); - return _isNewVersionAvailable(newVersion); - } - - static Future _isNewVersionAvailable(final Version? newVersion) async { - return newVersion != null && newVersion > version; - } - static Future getVersionAndUrl() async { - final v = await _getNewVersion(); - if (v == null) return null; + final release = await gitHub.repositories.getLatestRelease(repositorySlug); + Version latestVersion; + try { + latestVersion = Version.parse(release.tagName!.replaceFirst(versionRegExp, '')); + } catch (e) { + return null; + } - final newVersionAvailable = await _isNewVersionAvailable(v); + final asset = _extractUrl(release); - if (newVersionAvailable) { - return VersionAndUrl(v, false, await _newVersionUrl()); + if (asset != null && latestVersion > version) { + return VersionAndUrl(latestVersion, false, asset.browserDownloadUrl); } else { - return VersionAndUrl(v, true, null); + return VersionAndUrl(latestVersion, true, null); } } - static Future _getNewVersion() { - return gitHub.repositories.listTags(repositorySlug).asyncMap((final element) { - try { - return Version.parse(element.name.replaceFirst(versionRegExp, '')); - } catch (e) { - // TODO: log - return null; - } - }).firstWhere((final element) => (element ?? Version(0, 0, 0)) > version, orElse: () => version); - } - - static Future _newVersionUrl() async { - final release = await gitHub.repositories.getLatestRelease(repositorySlug); + static ReleaseAsset? _extractUrl(final Release release) { return release.assets?.firstWhere((final element) { + if (element.name == null) return false; if (Platform.isAndroid) { - return element.contentType == "application/vnd.android.package-archive"; + return element.name!.contains("Android"); } else if (Platform.isWindows) { - return element.contentType == "application/zip"; + return element.name!.contains("Windows"); } else if (Platform.isLinux) { - return element.contentType == "application/gzip"; + return element.name!.contains("Linux"); } else { return false; } - }).browserDownloadUrl; + }); } } diff --git a/pubspec.yaml b/pubspec.yaml index 96e15b9..d24630f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ description: Controlling Smarthome devices with AppBroker. # Both the version and the builder number may be overridden in flutter # build by specifying --build-name and --build-number, respectively. # Read more about versioning at semver.org. -version: 1.2.2+0 +version: 1.2.3+0 environment: sdk: ">=2.17.0"