Add ignore app update version
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user