Extracted update functions into external file
This commit is contained in:
parent
a96550863d
commit
1471cd25eb
|
@ -1,11 +1,11 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
import 'main.dart';
|
import 'main.dart';
|
||||||
|
import 'worker_update.dart';
|
||||||
import 'package:ollama_app/worker_setter.dart';
|
import 'package:ollama_app/worker_setter.dart';
|
||||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
@ -16,10 +16,8 @@ import 'package:url_launcher/url_launcher.dart';
|
||||||
import 'package:restart_app/restart_app.dart';
|
import 'package:restart_app/restart_app.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:install_referrer/install_referrer.dart';
|
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
|
||||||
import 'package:version/version.dart';
|
import 'package:version/version.dart';
|
||||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||||
|
|
||||||
class ScreenSettings extends StatefulWidget {
|
class ScreenSettings extends StatefulWidget {
|
||||||
const ScreenSettings({super.key});
|
const ScreenSettings({super.key});
|
||||||
|
@ -92,113 +90,15 @@ class _ScreenSettingsState extends State<ScreenSettings> {
|
||||||
final systemInputController = TextEditingController(
|
final systemInputController = TextEditingController(
|
||||||
text: prefs?.getString("system") ?? "You are a helpful assistant");
|
text: prefs?.getString("system") ?? "You are a helpful assistant");
|
||||||
|
|
||||||
final repoUrl = "https://github.com/JHubi1/ollama-app";
|
|
||||||
|
|
||||||
bool updateChecked = false;
|
|
||||||
bool updateLoading = false;
|
|
||||||
String updateStatus = "ok";
|
|
||||||
String? updateUrl;
|
|
||||||
String? latestVersion;
|
|
||||||
String? currentVersion;
|
|
||||||
String? updateChangeLog;
|
|
||||||
Future<bool> updatesSupported([bool takeAction = false]) async {
|
|
||||||
bool returnValue = true;
|
|
||||||
var installerApps = [
|
|
||||||
"org.fdroid.fdroid",
|
|
||||||
"org.gdroid.gdroid",
|
|
||||||
"eu.bubu1.fdroidclassic",
|
|
||||||
"in.sunilpaulmathew.izzyondroid",
|
|
||||||
"com.looker.droidify",
|
|
||||||
"com.machiav3lli.fdroid",
|
|
||||||
"nya.kitsunyan.foxydroid"
|
|
||||||
];
|
|
||||||
if (!(Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
|
|
||||||
if ((await InstallReferrer.referrer !=
|
|
||||||
InstallationAppReferrer.androidManually) &&
|
|
||||||
!(installerApps
|
|
||||||
.contains((await InstallReferrer.app).packageName ?? ""))) {
|
|
||||||
returnValue = false;
|
|
||||||
if (await InstallReferrer.referrer ==
|
|
||||||
InstallationAppReferrer.androidDebug ||
|
|
||||||
await InstallReferrer.referrer ==
|
|
||||||
InstallationAppReferrer.iosDebug) {
|
|
||||||
returnValue = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!repoUrl.startsWith("https://github.com")) {
|
|
||||||
returnValue = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!returnValue && takeAction) {
|
|
||||||
setState(() {
|
|
||||||
updateStatus = "notAvailable";
|
|
||||||
updateLoading = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return returnValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
void checkUpdate() async {
|
|
||||||
setState(() {
|
|
||||||
updateChecked = true;
|
|
||||||
updateLoading = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!await updatesSupported()) {
|
|
||||||
setState(() {
|
|
||||||
updateStatus = "notAvailable";
|
|
||||||
updateLoading = false;
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var repo = repoUrl.split("/");
|
|
||||||
|
|
||||||
currentVersion = (await PackageInfo.fromPlatform()).version;
|
|
||||||
// currentVersion = "1.0.0";
|
|
||||||
|
|
||||||
String? version;
|
|
||||||
try {
|
|
||||||
var request = await http
|
|
||||||
.get(Uri.parse(
|
|
||||||
"https://api.github.com/repos/${repo[3]}/${repo[4]}/releases"))
|
|
||||||
.timeout(const Duration(seconds: 5));
|
|
||||||
if (request.statusCode == 403) {
|
|
||||||
setState(() {
|
|
||||||
updateStatus = "rateLimit";
|
|
||||||
updateLoading = false;
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
version = jsonDecode(request.body)[0]["tag_name"];
|
|
||||||
updateChangeLog = jsonDecode(request.body)[0]["body"];
|
|
||||||
updateUrl = jsonDecode(request.body)[0]["html_url"];
|
|
||||||
} catch (_) {
|
|
||||||
setState(() {
|
|
||||||
updateStatus = "error";
|
|
||||||
updateLoading = false;
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
latestVersion = version;
|
|
||||||
updateStatus = "ok";
|
|
||||||
|
|
||||||
setState(() {
|
|
||||||
updateLoading = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
checkHost();
|
checkHost();
|
||||||
updatesSupported(true);
|
updatesSupported(setState, true);
|
||||||
if (prefs!.getBool("checkUpdateOnSettingsOpen") ?? false) {
|
if (prefs!.getBool("checkUpdateOnSettingsOpen") ?? false) {
|
||||||
checkUpdate();
|
checkUpdate(setState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -719,54 +619,9 @@ class _ScreenSettingsState extends State<ScreenSettings> {
|
||||||
if ((Version.parse(latestVersion ?? "1.0.0") >
|
if ((Version.parse(latestVersion ?? "1.0.0") >
|
||||||
Version.parse(currentVersion ?? "2.0.0")) &&
|
Version.parse(currentVersion ?? "2.0.0")) &&
|
||||||
(updateStatus == "ok")) {
|
(updateStatus == "ok")) {
|
||||||
showDialog(
|
updateDialog(context, title);
|
||||||
context: context,
|
|
||||||
builder: (context) {
|
|
||||||
return AlertDialog(
|
|
||||||
title: Text(
|
|
||||||
AppLocalizations.of(context)!
|
|
||||||
.settingsUpdateDialogTitle),
|
|
||||||
content: SizedBox(
|
|
||||||
width: 200,
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(AppLocalizations.of(context)!
|
|
||||||
.settingsUpdateDialogDescription),
|
|
||||||
title(
|
|
||||||
AppLocalizations.of(context)!
|
|
||||||
.settingsUpdateChangeLog),
|
|
||||||
MarkdownBody(
|
|
||||||
data: updateChangeLog ??
|
|
||||||
"Nothing"),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
actions: [
|
|
||||||
TextButton(
|
|
||||||
onPressed: () {
|
|
||||||
HapticFeedback.selectionClick();
|
|
||||||
Navigator.of(context).pop();
|
|
||||||
},
|
|
||||||
child: Text(AppLocalizations.of(
|
|
||||||
context)!
|
|
||||||
.settingsUpdateDialogCancel)),
|
|
||||||
TextButton(
|
|
||||||
onPressed: () {
|
|
||||||
HapticFeedback.selectionClick();
|
|
||||||
Navigator.of(context).pop();
|
|
||||||
launchUrl(
|
|
||||||
mode: LaunchMode
|
|
||||||
.inAppBrowserView,
|
|
||||||
Uri.parse(updateUrl!));
|
|
||||||
},
|
|
||||||
child: Text(AppLocalizations.of(
|
|
||||||
context)!
|
|
||||||
.settingsUpdateDialogUpdate))
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
checkUpdate();
|
checkUpdate(setState);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,152 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:install_referrer/install_referrer.dart';
|
||||||
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
|
const repoUrl = "https://github.com/JHubi1/ollama-app";
|
||||||
|
|
||||||
|
bool updateChecked = false;
|
||||||
|
bool updateLoading = false;
|
||||||
|
String updateStatus = "ok";
|
||||||
|
String? updateUrl;
|
||||||
|
String? latestVersion;
|
||||||
|
String? currentVersion;
|
||||||
|
String? updateChangeLog;
|
||||||
|
Future<bool> updatesSupported(Function setState,
|
||||||
|
[bool takeAction = false]) async {
|
||||||
|
bool returnValue = true;
|
||||||
|
var installerApps = [
|
||||||
|
"org.fdroid.fdroid",
|
||||||
|
"org.gdroid.gdroid",
|
||||||
|
"eu.bubu1.fdroidclassic",
|
||||||
|
"in.sunilpaulmathew.izzyondroid",
|
||||||
|
"com.looker.droidify",
|
||||||
|
"com.machiav3lli.fdroid",
|
||||||
|
"nya.kitsunyan.foxydroid"
|
||||||
|
];
|
||||||
|
if (!(Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
|
||||||
|
if ((await InstallReferrer.referrer !=
|
||||||
|
InstallationAppReferrer.androidManually) &&
|
||||||
|
!(installerApps
|
||||||
|
.contains((await InstallReferrer.app).packageName ?? ""))) {
|
||||||
|
returnValue = false;
|
||||||
|
if (await InstallReferrer.referrer ==
|
||||||
|
InstallationAppReferrer.androidDebug ||
|
||||||
|
await InstallReferrer.referrer == InstallationAppReferrer.iosDebug) {
|
||||||
|
returnValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!repoUrl.startsWith("https://github.com")) {
|
||||||
|
returnValue = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!returnValue && takeAction) {
|
||||||
|
setState(() {
|
||||||
|
updateStatus = "notAvailable";
|
||||||
|
updateLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkUpdate(Function setState) async {
|
||||||
|
setState(() {
|
||||||
|
updateChecked = true;
|
||||||
|
updateLoading = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!await updatesSupported(setState)) {
|
||||||
|
setState(() {
|
||||||
|
updateStatus = "notAvailable";
|
||||||
|
updateLoading = false;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var repo = repoUrl.split("/");
|
||||||
|
|
||||||
|
currentVersion = (await PackageInfo.fromPlatform()).version;
|
||||||
|
// currentVersion = "1.0.0";
|
||||||
|
|
||||||
|
String? version;
|
||||||
|
try {
|
||||||
|
var request = await http
|
||||||
|
.get(Uri.parse(
|
||||||
|
"https://api.github.com/repos/${repo[3]}/${repo[4]}/releases"))
|
||||||
|
.timeout(const Duration(seconds: 5));
|
||||||
|
if (request.statusCode == 403) {
|
||||||
|
setState(() {
|
||||||
|
updateStatus = "rateLimit";
|
||||||
|
updateLoading = false;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
version = jsonDecode(request.body)[0]["tag_name"];
|
||||||
|
updateChangeLog = jsonDecode(request.body)[0]["body"];
|
||||||
|
updateUrl = jsonDecode(request.body)[0]["html_url"];
|
||||||
|
} catch (_) {
|
||||||
|
setState(() {
|
||||||
|
updateStatus = "error";
|
||||||
|
updateLoading = false;
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
latestVersion = version;
|
||||||
|
updateStatus = "ok";
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
updateLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateDialog(BuildContext context, Function title) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title:
|
||||||
|
Text(AppLocalizations.of(context)!.settingsUpdateDialogTitle),
|
||||||
|
content: SizedBox(
|
||||||
|
width: 200,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(AppLocalizations.of(context)!
|
||||||
|
.settingsUpdateDialogDescription),
|
||||||
|
title(AppLocalizations.of(context)!.settingsUpdateChangeLog),
|
||||||
|
MarkdownBody(data: updateChangeLog ?? "Nothing"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
HapticFeedback.selectionClick();
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
child: Text(AppLocalizations.of(context)!
|
||||||
|
.settingsUpdateDialogCancel)),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
HapticFeedback.selectionClick();
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
launchUrl(
|
||||||
|
mode: LaunchMode.inAppBrowserView,
|
||||||
|
Uri.parse(updateUrl!));
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
AppLocalizations.of(context)!.settingsUpdateDialogUpdate))
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue