From 3aa8273210d42981ad2342ee5529f6d4c3499e26 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Thu, 5 Oct 2023 21:49:36 +0330 Subject: [PATCH] Add ignore app update version --- lib/features/about/view/about_page.dart | 3 ++- lib/features/common/app_update_notifier.dart | 20 +++++++++++++++++++- lib/features/common/new_version_dialog.dart | 10 ++++++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/lib/features/about/view/about_page.dart b/lib/features/about/view/about_page.dart index d8630f15..d7fc055d 100644 --- a/lib/features/about/view/about_page.dart +++ b/lib/features/about/view/about_page.dart @@ -24,7 +24,8 @@ class AboutPage extends HookConsumerWidget { (_, next) async { if (!context.mounted) return; switch (next) { - case AppUpdateStateAvailable(:final versionInfo): + case AppUpdateStateAvailable(:final versionInfo) || + AppUpdateStateIgnored(:final versionInfo): return NewVersionDialog( appInfo.presentVersion, versionInfo, diff --git a/lib/features/common/app_update_notifier.dart b/lib/features/common/app_update_notifier.dart index d55c3b9f..dcfe4743 100644 --- a/lib/features/common/app_update_notifier.dart +++ b/lib/features/common/app_update_notifier.dart @@ -6,6 +6,7 @@ import 'package:hiddify/data/data_providers.dart'; import 'package:hiddify/domain/app/app.dart'; import 'package:hiddify/features/common/new_version_dialog.dart'; import 'package:hiddify/services/service_providers.dart'; +import 'package:hiddify/utils/pref_notifier.dart'; import 'package:hiddify/utils/utils.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -20,6 +21,8 @@ class AppUpdateState with _$AppUpdateState { const factory AppUpdateState.error(AppFailure error) = AppUpdateStateError; const factory AppUpdateState.available(RemoteVersionInfo versionInfo) = AppUpdateStateAvailable; + const factory AppUpdateState.ignored(RemoteVersionInfo versionInfo) = + AppUpdateStateIgnored; const factory AppUpdateState.notAvailable() = AppUpdateStateNotAvailable; } @@ -31,6 +34,12 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger { return const AppUpdateState.initial(); } + Pref get _ignoreReleasePref => Pref( + ref.read(sharedPreferencesProvider), + 'ignored_release_version', + null, + ); + Future check() async { loggy.debug("checking for update"); state = const AppUpdateState.checking(); @@ -54,7 +63,10 @@ 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); + } else if (remote.version.compareTo(currentVersion) > 0) { loggy.debug("new version available: $remote"); return state = AppUpdateState.available(remote); } @@ -66,6 +78,12 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger { ).run(); } + Future ignoreRelease(RemoteVersionInfo versionInfo) async { + loggy.debug("ignoring release [${versionInfo.version}]"); + await _ignoreReleasePref.update(versionInfo.version); + state = AppUpdateStateIgnored(versionInfo); + } + Future _schedule() async { loggy.debug("scheduling app update checker"); return ref.read(cronServiceProvider).schedule( diff --git a/lib/features/common/new_version_dialog.dart b/lib/features/common/new_version_dialog.dart index 20ef11e0..197b32c4 100644 --- a/lib/features/common/new_version_dialog.dart +++ b/lib/features/common/new_version_dialog.dart @@ -3,6 +3,7 @@ import 'package:gap/gap.dart'; import 'package:go_router/go_router.dart'; import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/domain/app/app.dart'; +import 'package:hiddify/features/common/app_update_notifier.dart'; import 'package:hiddify/utils/utils.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; @@ -11,7 +12,6 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger { NewVersionDialog( this.currentVersion, this.newVersion, { - // super.key, this.canIgnore = true, }) : super(key: _dialogKey); @@ -79,9 +79,11 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger { actions: [ if (canIgnore) TextButton( - onPressed: () { - // TODO add prefs for ignoring version - context.pop(); + onPressed: () async { + await ref + .read(appUpdateNotifierProvider.notifier) + .ignoreRelease(newVersion); + if (context.mounted) context.pop(); }, child: Text(t.appUpdate.ignoreBtnTxt), ),