pikapika/lib/basic/config/Version.dart

74 lines
1.7 KiB
Dart
Raw Normal View History

2021-11-11 02:10:18 +00:00
import 'dart:async' show Future;
2021-11-11 09:05:48 +00:00
import 'dart:convert';
import 'package:event/event.dart';
import 'package:flutter/material.dart';
2021-11-11 02:10:18 +00:00
import 'package:flutter/services.dart' show rootBundle;
2021-11-11 09:05:48 +00:00
import 'package:pikapika/basic/Common.dart';
2021-11-11 02:10:18 +00:00
2021-11-11 03:00:38 +00:00
import '../Method.dart';
const _versionUrl =
2021-11-11 09:05:48 +00:00
"https://api.github.com/repos/niuhuan/pikapika/releases/latest";
2021-11-11 02:10:18 +00:00
const _versionAssets = 'lib/assets/version.txt';
late String _version;
2021-11-11 09:05:48 +00:00
String? _latestVersion;
String? _latestVersionInfo;
2021-11-11 09:05:48 +00:00
2021-11-11 02:10:18 +00:00
Future initVersion() async {
2021-11-11 09:05:48 +00:00
// 当前版本
2021-11-11 02:10:18 +00:00
try {
_version = (await rootBundle.loadString(_versionAssets)).trim();
} catch (e) {
_version = "dirty";
}
2021-11-11 09:05:48 +00:00
}
var versionEvent = Event<EventArgs>();
String currentVersion() {
return _version;
}
String? latestVersion() {
return _latestVersion;
}
String? latestVersionInfo() {
return _latestVersionInfo;
}
2021-11-11 09:05:48 +00:00
Future autoCheckNewVersion() {
return _versionCheck();
}
Future manualCheckNewVersion(BuildContext context) async {
try {
defaultToast(context, "检查更新中");
await _versionCheck();
defaultToast(context, "检查更新成功");
} catch (e) {
defaultToast(context, "检查更新失败 : $e");
}
2021-11-11 02:10:18 +00:00
}
2021-11-11 09:05:48 +00:00
bool dirtyVersion() {
2022-02-25 11:20:53 +00:00
return "dirty" == _version;
2021-11-11 09:05:48 +00:00
}
2021-11-11 03:00:38 +00:00
2021-11-11 09:05:48 +00:00
// maybe exception
2021-11-11 03:00:38 +00:00
Future _versionCheck() async {
2022-02-25 11:20:53 +00:00
if (!dirtyVersion()) {
2022-02-11 05:33:42 +00:00
// 检查更新只能使用defaultHttpClient, 而不能使用pika的client, 否则会 "tls handshake failure"
var json = jsonDecode(await method.defaultHttpClientGet(_versionUrl));
2021-11-11 09:05:48 +00:00
if (json["name"] != null) {
String latestVersion = (json["name"]);
if (latestVersion != _version) {
_latestVersion = latestVersion;
_latestVersionInfo = json["body"] ?? "";
2021-11-11 09:05:48 +00:00
}
2021-11-11 03:00:38 +00:00
}
2021-11-11 09:05:48 +00:00
} // else dirtyVersion
versionEvent.broadcast();
}