Skip to content

Commit

Permalink
Extracted update functions into external file
Browse files Browse the repository at this point in the history
  • Loading branch information
JHubi1 committed Jun 5, 2024
1 parent a965508 commit 1471cd2
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 151 deletions.
157 changes: 6 additions & 151 deletions lib/screen_settings.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'dart:convert';
import 'dart:io';

import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'main.dart';
import 'worker_update.dart';
import 'package:ollama_app/worker_setter.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

Expand All @@ -16,10 +16,8 @@ import 'package:url_launcher/url_launcher.dart';
import 'package:restart_app/restart_app.dart';
import 'package:file_picker/file_picker.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:flutter_markdown/flutter_markdown.dart';
import 'package:bitsdojo_window/bitsdojo_window.dart';

class ScreenSettings extends StatefulWidget {
const ScreenSettings({super.key});
Expand Down Expand Up @@ -92,113 +90,15 @@ class _ScreenSettingsState extends State<ScreenSettings> {
final systemInputController = TextEditingController(
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
void initState() {
super.initState();
WidgetsFlutterBinding.ensureInitialized();

checkHost();
updatesSupported(true);
updatesSupported(setState, true);
if (prefs!.getBool("checkUpdateOnSettingsOpen") ?? false) {
checkUpdate();
checkUpdate(setState);
}
}

Expand Down Expand Up @@ -719,54 +619,9 @@ class _ScreenSettingsState extends State<ScreenSettings> {
if ((Version.parse(latestVersion ?? "1.0.0") >
Version.parse(currentVersion ?? "2.0.0")) &&
(updateStatus == "ok")) {
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))
]);
});
updateDialog(context, title);
} else {
checkUpdate();
checkUpdate(setState);
return;
}
},
Expand Down
152 changes: 152 additions & 0 deletions lib/worker_update.dart
Original file line number Diff line number Diff line change
@@ -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))
]);
});
}

0 comments on commit 1471cd2

Please sign in to comment.