feat: new version check (#102)

This commit is contained in:
Li Wei authored and GitHub committed 2023-04-01 15:33:58 +08:00
1 parent 701ea59035
commit 33f6325bf7
19 files changed
+235 -91

No files matched your search

@@ -1,7 +1,17 @@
import 'dart:convert';
import 'package:get/get.dart';
import 'package:gopeed/api/api.dart';
class SettingController extends GetxController {
final tapStatues = <String, bool>{}.obs;
final latestVersion = "".obs;
@override
void onInit() {
super.onInit();
fetchLatestVersion();
}
// set all tap status to false
void clearTap() {
@@ -13,4 +23,22 @@ class SettingController extends GetxController {
clearTap();
tapStatues[key] = true;
}
// fetch latest version
void fetchLatestVersion() async {
String? releaseDataStr;
try {
releaseDataStr =
(await proxyRequest("https://gopeed.com/api/release")).data;
} catch (e) {
releaseDataStr = (await proxyRequest(
"https://api.github.com/repos/GopeedLab/gopeed/releases/latest"))
.data;
}
if (releaseDataStr == null) {
return;
}
final releaseData = jsonDecode(releaseDataStr);
latestVersion.value = releaseData["tag_name"].substring(1);
}
}
@@ -7,6 +7,7 @@ import 'package:get/get.dart';
import '../../../../util/message.dart';
import 'package:intl/intl.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:badges/badges.dart' as badges;
import '../../../../generated/locales.g.dart';
import '../../../../util/localeManager.dart';
@@ -236,10 +237,45 @@ class SettingView extends GetView<SettingController> {
mode: LaunchMode.externalApplication);
},
);
buildVersion() => ListTile(
title: Text('version'.tr),
subtitle: Text(packageInfo.version),
);
buildVersion() {
final hasNewVersion = controller.latestVersion.value != '' &&
controller.latestVersion.value != packageInfo.version;
return ListTile(
title: hasNewVersion
? badges.Badge(
position: badges.BadgePosition.topStart(start: 36),
child: Text('version'.tr))
: Text('version'.tr),
subtitle: Text(packageInfo.version),
onTap: () {
if (hasNewVersion) {
showDialog(
context: context,
builder: (context) => AlertDialog(
content: Text('newVersionTitle'.trParams(
{'version': controller.latestVersion.value})),
actions: [
TextButton(
onPressed: () {
Get.back();
},
child: Text('newVersionLater'.tr),
),
TextButton(
onPressed: () {
launchUrl(
Uri.parse(
'https://github.com/GopeedLab/gopeed/releases/latest'),
mode: LaunchMode.externalApplication);
},
child: Text('newVersionUpdate'.tr),
),
],
));
}
},
);
}
// advanced config items start
final buildApiProtocol = _buildConfigItem(