1
0
mirror of https://github.com/go-vikunja/app synced 2024-05-31 17:57:14 +00:00

addded version check to prompt user to update

This commit is contained in:
Benimautner 2023-01-07 02:17:00 +01:00
parent 0effd02ed2
commit dacd24bfda
4 changed files with 70 additions and 5 deletions

View File

@ -0,0 +1,56 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'dart:convert';
import 'package:http/http.dart';
import 'package:url_launcher/url_launcher.dart';
class VersionChecker {
GlobalKey<ScaffoldMessengerState> snackbarKey;
VersionChecker(this.snackbarKey);
String repo = "https://github.com/go-vikunja/app/releases/latest";
Future<String> getLatestVersionTag() async {
String api = "https://api.github.com/repos/go-vikunja/app";
String endpoint = "/releases";
return get(Uri.parse(api + endpoint)).then((response) {
dynamic jsonResponse = json.decode(response.body);
String latestVersion = jsonResponse[0]['tag_name'];
if (latestVersion.startsWith("v")) {
latestVersion = latestVersion.replaceFirst("v", "");
}
return latestVersion;
});
}
Future<String> getCurrentVersionTag() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
print("current: " + packageInfo.version);
return packageInfo.version;
}
Future<bool> isUpToDate() async {
String latest = await getLatestVersionTag();
String current = await getCurrentVersionTag();
return latest == current;
}
postVersionCheckSnackbar() async {
String latest = await getLatestVersionTag();
isUpToDate().then((value) {
if (!value) {
// not up to date
SnackBar snackBar = SnackBar(
content: Text("New version available: $latest"),
action: SnackBarAction(
label: "View on Github",
onPressed: () => launchUrl(Uri.parse(repo), mode: LaunchMode.externalApplication)),
);
snackbarKey.currentState?.showSnackBar(snackBar);
}
});
}
}

View File

@ -1,4 +1,3 @@
import 'dart:math';
import 'dart:developer' as dev;
import 'package:flutter/material.dart';
@ -14,12 +13,12 @@ import 'package:vikunja_app/api/namespace_implementation.dart';
import 'package:vikunja_app/api/server_implementation.dart';
import 'package:vikunja_app/api/task_implementation.dart';
import 'package:vikunja_app/api/user_implementation.dart';
import 'package:vikunja_app/api/version_check.dart';
import 'package:vikunja_app/managers/notifications.dart';
import 'package:vikunja_app/managers/user.dart';
import 'package:vikunja_app/models/user.dart';
import 'package:vikunja_app/service/services.dart';
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'package:flutter_local_notifications/flutter_local_notifications.dart'as notifs;
@ -64,6 +63,8 @@ class VikunjaGlobalState extends State<VikunjaGlobal> {
SettingsManager get settingsManager => new SettingsManager(_storage);
VersionChecker get versionChecker => new VersionChecker(snackbarKey);
NamespaceService get namespaceService => new NamespaceAPIService(client);
TaskService get taskService => new TaskAPIService(client);
@ -123,6 +124,7 @@ class VikunjaGlobalState extends State<VikunjaGlobal> {
platformChannelSpecificsReminders = notifs.NotificationDetails(
android: androidSpecificsReminders, iOS: iOSSpecifics);
notificationInitializer();
versionChecker.postVersionCheckSnackbar();
}

View File

@ -13,6 +13,7 @@ class SettingsPageState extends State<SettingsPage> {
List<TaskList>? taskListList;
int? defaultList;
bool? ignoreCertificates;
String? versionTag, newestVersionTag;
@override
Widget build(BuildContext context) {
@ -20,9 +21,10 @@ class SettingsPageState extends State<SettingsPage> {
VikunjaGlobal.of(context).listService.getAll().then((value) => setState(() => taskListList = value));
if(defaultList == null)
VikunjaGlobal.of(context).listService.getDefaultList().then((value) => setState(() => defaultList = value == null ? null : int.tryParse(value)));
if(ignoreCertificates == null)
VikunjaGlobal.of(context).settingsManager.getIgnoreCertificates().then((value) => setState(() => ignoreCertificates = value == "1" ? true:false));
if(versionTag == null)
VikunjaGlobal.of(context).versionChecker.getCurrentVersionTag().then((value) => setState(() => versionTag = value));
return new Scaffold(
appBar: AppBar(title: Text("Settings"),),
@ -43,7 +45,10 @@ class SettingsPageState extends State<SettingsPage> {
CheckboxListTile(title: Text("Ignore Certificates"), value: ignoreCertificates, onChanged: (value) {
setState(() => ignoreCertificates = value);
VikunjaGlobal.of(context).client.reload_ignore_certs(value);
}) : ListTile(title: Text("..."))
}) : ListTile(title: Text("...")),
TextButton(onPressed: () => VikunjaGlobal.of(context).versionChecker.getLatestVersionTag().then((value) => newestVersionTag = value), child: Text("Check for latest version")),
Text("Current version: ${versionTag ?? "loading"}"),
Text(newestVersionTag != null ? "Newest version: $newestVersionTag" : "")
],
),
);

View File

@ -1,7 +1,7 @@
name: vikunja_app
description: Vikunja as Flutter cross platform app
version: 0.0.22-alpha
version: 0.0.23-alpha
environment:
sdk: ">=2.12.0 <3.0.0"
@ -27,6 +27,8 @@ dependencies:
flutter_colorpicker: ^1.0.3
flutter_keyboard_visibility: ^5.3.0
dotted_border: ^2.0.0+2
package_info_plus: ^3.0.2
url_launcher: ^6.1.7
dev_dependencies:
flutter_test: