2023-09-12 15:22:58 +03:30
|
|
|
import 'package:hiddify/core/core_providers.dart';
|
|
|
|
|
import 'package:hiddify/data/data_providers.dart';
|
|
|
|
|
import 'package:hiddify/domain/app/app.dart';
|
|
|
|
|
import 'package:hiddify/utils/utils.dart';
|
|
|
|
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
|
|
|
|
|
|
|
|
part 'app_update_notifier.g.dart';
|
|
|
|
|
|
|
|
|
|
@Riverpod(keepAlive: true)
|
|
|
|
|
class AppUpdateNotifier extends _$AppUpdateNotifier with AppLogger {
|
|
|
|
|
@override
|
|
|
|
|
Future<RemoteVersionInfo?> build() async {
|
|
|
|
|
loggy.debug("checking for update");
|
2023-09-15 23:09:58 +03:30
|
|
|
final appInfo = ref.watch(appInfoProvider);
|
|
|
|
|
// TODO use market-specific update checkers
|
|
|
|
|
if (!appInfo.release.allowCustomUpdateChecker) {
|
|
|
|
|
loggy.debug(
|
|
|
|
|
"custom update checkers are not allowed for [${appInfo.release.name}] release",
|
|
|
|
|
);
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
final currentVersion = appInfo.version;
|
2023-09-12 15:22:58 +03:30
|
|
|
return ref
|
|
|
|
|
.watch(appRepositoryProvider)
|
|
|
|
|
.getLatestVersion(includePreReleases: true)
|
|
|
|
|
.match(
|
|
|
|
|
(l) {
|
|
|
|
|
loggy.warning("failed to get latest version, $l");
|
|
|
|
|
throw l;
|
|
|
|
|
},
|
|
|
|
|
(remote) {
|
2023-09-16 00:56:03 +03:30
|
|
|
if (remote.version.compareTo(currentVersion) > 0) {
|
2023-09-12 15:22:58 +03:30
|
|
|
loggy.info("new version available: $remote");
|
|
|
|
|
return remote;
|
|
|
|
|
}
|
2023-09-15 16:51:39 +02:00
|
|
|
loggy.info(
|
2023-09-15 23:09:58 +03:30
|
|
|
"already using latest version[$currentVersion], remote: $remote",
|
|
|
|
|
);
|
2023-09-12 15:22:58 +03:30
|
|
|
return null;
|
|
|
|
|
},
|
|
|
|
|
).run();
|
|
|
|
|
}
|
|
|
|
|
}
|