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:
parent
0effd02ed2
commit
dacd24bfda
56
lib/api/version_check.dart
Normal file
56
lib/api/version_check.dart
Normal 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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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" : "")
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue
Block a user