From 52dd2e38dec7b7dfa8ed18ca4cd671982c2b4dbe Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Fri, 10 Nov 2023 12:17:51 +0330 Subject: [PATCH] Fix manual update checker --- lib/features/common/app_update_notifier.dart | 31 +++++++++++++------- pubspec.lock | 2 +- pubspec.yaml | 1 + 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/lib/features/common/app_update_notifier.dart b/lib/features/common/app_update_notifier.dart index e390ee6c..939c5591 100644 --- a/lib/features/common/app_update_notifier.dart +++ b/lib/features/common/app_update_notifier.dart @@ -9,6 +9,7 @@ import 'package:hiddify/utils/pref_notifier.dart'; import 'package:hiddify/utils/utils.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:upgrader/upgrader.dart'; +import 'package:version/version.dart'; part 'app_update_notifier.freezed.dart'; part 'app_update_notifier.g.dart'; @@ -63,7 +64,6 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger { ); return state = const AppUpdateState.disabled(); } - final currentVersion = appInfo.version; return ref .watch(appRepositoryProvider) .getLatestVersion( @@ -75,18 +75,27 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger { return state = AppUpdateState.error(err); }, (remote) { - if (remote.version.compareTo(currentVersion) > 0) { - if (remote.version == _ignoreReleasePref.getValue()) { - loggy.debug("ignored release [${remote.version}]"); - return state = AppUpdateStateIgnored(remote); + try { + final latestVersion = Version.parse(remote.version); + final currentVersion = Version.parse(appInfo.version); + if (latestVersion > currentVersion) { + if (remote.version == _ignoreReleasePref.getValue()) { + loggy.debug("ignored release [${remote.version}]"); + return state = AppUpdateStateIgnored(remote); + } + loggy.debug("new version available: $remote"); + return state = AppUpdateState.available(remote); } - loggy.debug("new version available: $remote"); - return state = AppUpdateState.available(remote); + loggy.info( + "already using latest version[$currentVersion], remote: [${remote.version}]", + ); + return state = const AppUpdateState.notAvailable(); + } catch (error, stackTrace) { + loggy.warning("error parsing versions", error, stackTrace); + return state = AppUpdateState.error( + AppFailure.unexpected(error, stackTrace), + ); } - loggy.info( - "already using latest version[$currentVersion], remote: [${remote.version}]", - ); - return state = const AppUpdateState.notAvailable(); }, ).run(); } diff --git a/pubspec.lock b/pubspec.lock index 04762b68..a66a260c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1563,7 +1563,7 @@ packages: source: hosted version: "2.1.4" version: - dependency: transitive + dependency: "direct main" description: name: version sha256: "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94" diff --git a/pubspec.yaml b/pubspec.yaml index 42d8cb10..e190e9fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,6 +67,7 @@ dependencies: humanizer: ^2.2.0 upgrader: ^8.2.0 toastification: ^1.1.0 + version: ^3.0.2 dev_dependencies: flutter_test: