Add ignore app update version

This commit is contained in:
problematicconsumer
2023-10-05 21:49:36 +03:30
parent fbbda93290
commit 3aa8273210
3 changed files with 27 additions and 6 deletions

View File

@@ -24,7 +24,8 @@ class AboutPage extends HookConsumerWidget {
(_, next) async { (_, next) async {
if (!context.mounted) return; if (!context.mounted) return;
switch (next) { switch (next) {
case AppUpdateStateAvailable(:final versionInfo): case AppUpdateStateAvailable(:final versionInfo) ||
AppUpdateStateIgnored(:final versionInfo):
return NewVersionDialog( return NewVersionDialog(
appInfo.presentVersion, appInfo.presentVersion,
versionInfo, versionInfo,

View File

@@ -6,6 +6,7 @@ import 'package:hiddify/data/data_providers.dart';
import 'package:hiddify/domain/app/app.dart'; import 'package:hiddify/domain/app/app.dart';
import 'package:hiddify/features/common/new_version_dialog.dart'; import 'package:hiddify/features/common/new_version_dialog.dart';
import 'package:hiddify/services/service_providers.dart'; import 'package:hiddify/services/service_providers.dart';
import 'package:hiddify/utils/pref_notifier.dart';
import 'package:hiddify/utils/utils.dart'; import 'package:hiddify/utils/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.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.error(AppFailure error) = AppUpdateStateError;
const factory AppUpdateState.available(RemoteVersionInfo versionInfo) = const factory AppUpdateState.available(RemoteVersionInfo versionInfo) =
AppUpdateStateAvailable; AppUpdateStateAvailable;
const factory AppUpdateState.ignored(RemoteVersionInfo versionInfo) =
AppUpdateStateIgnored;
const factory AppUpdateState.notAvailable() = AppUpdateStateNotAvailable; const factory AppUpdateState.notAvailable() = AppUpdateStateNotAvailable;
} }
@@ -31,6 +34,12 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger {
return const AppUpdateState.initial(); return const AppUpdateState.initial();
} }
Pref<String?, dynamic> get _ignoreReleasePref => Pref(
ref.read(sharedPreferencesProvider),
'ignored_release_version',
null,
);
Future<AppUpdateState> check() async { Future<AppUpdateState> check() async {
loggy.debug("checking for update"); loggy.debug("checking for update");
state = const AppUpdateState.checking(); state = const AppUpdateState.checking();
@@ -54,7 +63,10 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger {
return state = AppUpdateState.error(err); return state = AppUpdateState.error(err);
}, },
(remote) { (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"); loggy.debug("new version available: $remote");
return state = AppUpdateState.available(remote); return state = AppUpdateState.available(remote);
} }
@@ -66,6 +78,12 @@ class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger {
).run(); ).run();
} }
Future<void> ignoreRelease(RemoteVersionInfo versionInfo) async {
loggy.debug("ignoring release [${versionInfo.version}]");
await _ignoreReleasePref.update(versionInfo.version);
state = AppUpdateStateIgnored(versionInfo);
}
Future<void> _schedule() async { Future<void> _schedule() async {
loggy.debug("scheduling app update checker"); loggy.debug("scheduling app update checker");
return ref.read(cronServiceProvider).schedule( return ref.read(cronServiceProvider).schedule(

View File

@@ -3,6 +3,7 @@ import 'package:gap/gap.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hiddify/core/core_providers.dart'; import 'package:hiddify/core/core_providers.dart';
import 'package:hiddify/domain/app/app.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:hiddify/utils/utils.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
@@ -11,7 +12,6 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger {
NewVersionDialog( NewVersionDialog(
this.currentVersion, this.currentVersion,
this.newVersion, { this.newVersion, {
// super.key,
this.canIgnore = true, this.canIgnore = true,
}) : super(key: _dialogKey); }) : super(key: _dialogKey);
@@ -79,9 +79,11 @@ class NewVersionDialog extends HookConsumerWidget with PresLogger {
actions: [ actions: [
if (canIgnore) if (canIgnore)
TextButton( TextButton(
onPressed: () { onPressed: () async {
// TODO add prefs for ignoring version await ref
context.pop(); .read(appUpdateNotifierProvider.notifier)
.ignoreRelease(newVersion);
if (context.mounted) context.pop();
}, },
child: Text(t.appUpdate.ignoreBtnTxt), child: Text(t.appUpdate.ignoreBtnTxt),
), ),