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 {
if (!context.mounted) return;
switch (next) {
case AppUpdateStateAvailable(:final versionInfo):
case AppUpdateStateAvailable(:final versionInfo) ||
AppUpdateStateIgnored(:final versionInfo):
return NewVersionDialog(
appInfo.presentVersion,
versionInfo,

View File

@@ -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<String?, dynamic> get _ignoreReleasePref => Pref(
ref.read(sharedPreferencesProvider),
'ignored_release_version',
null,
);
Future<AppUpdateState> 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<void> ignoreRelease(RemoteVersionInfo versionInfo) async {
loggy.debug("ignoring release [${versionInfo.version}]");
await _ignoreReleasePref.update(versionInfo.version);
state = AppUpdateStateIgnored(versionInfo);
}
Future<void> _schedule() async {
loggy.debug("scheduling app update checker");
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: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),
),