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