From 3a4556abb52b1911956bcdc8955be37987debf99 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 14 Oct 2023 19:30:11 +0200 Subject: [PATCH] feat: integrate github api OTA 4Windows --- lib/classes/ota_manager.dart | 79 +++++++++++++++++------------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/lib/classes/ota_manager.dart b/lib/classes/ota_manager.dart index 0acd57b..559777d 100644 --- a/lib/classes/ota_manager.dart +++ b/lib/classes/ota_manager.dart @@ -13,38 +13,33 @@ class OtaManager { static Future> checkLatestOta() async { List result = []; try { - if (Platform.isLinux) { - ProcessResult pr = (await shell.run('${Constants.githubApiRequest} ${Constants.githubApiReleases}'))[0]; - if (pr.exitCode != 0) { - return result; - } - Map json = jsonDecode(pr.stdout.toString()); - - // fetch tagname & url - if (!json.containsKey(Constants.githubApiFieldTagname)) { - return result; - } - result.add(json[Constants.githubApiFieldTagname]); - if (!json.containsKey(Constants.githubApiFieldHtmlUrl)) { - return result; - } - result.add(json[Constants.githubApiFieldHtmlUrl]); + ProcessResult pr = (await shell.run('${Platform.isLinux ? "" : "cmd /c"} ${Constants.githubApiRequest} ${Constants.githubApiReleases}'))[0]; + if (pr.exitCode != 0) { + return result; + } + Map json = jsonDecode(pr.stdout.toString()); - // fetch download url - if (!json.containsKey(Constants.githubApiFieldAssets)) { - return result; - } - for (Map asset in json[Constants.githubApiFieldAssets]) { - if (asset.containsKey(Constants.githubApiFieldBrowserDownloadUrl) && asset[Constants.githubApiFieldBrowserDownloadUrl].toString().endsWith('.deb')) { - result.add(asset[Constants.githubApiFieldBrowserDownloadUrl]); - break; - } - } + // fetch tagname & url + if (!json.containsKey(Constants.githubApiFieldTagname)) { return result; - } else { - // ToDo Windows integration; + } + result.add(json[Constants.githubApiFieldTagname]); + if (!json.containsKey(Constants.githubApiFieldHtmlUrl)) { + return result; + } + result.add(json[Constants.githubApiFieldHtmlUrl]); + + // fetch download url + if (!json.containsKey(Constants.githubApiFieldAssets)) { return result; } + for (Map asset in json[Constants.githubApiFieldAssets]) { + if (asset.containsKey(Constants.githubApiFieldBrowserDownloadUrl) && asset[Constants.githubApiFieldBrowserDownloadUrl].toString().endsWith(Platform.isLinux ? '.deb' : '.msi')) { + result.add(asset[Constants.githubApiFieldBrowserDownloadUrl]); + break; + } + } + return result; } catch (e) { return result; } @@ -59,36 +54,38 @@ class OtaManager { static Future downloadOta(String tagname, String downloadUrl) async { bool result = true; try { + List prs; if (Platform.isLinux) { - List prs = (await shell.run(''' + prs = (await shell.run(''' rm -rf ${Constants.packagesLinuxDownloadPath}/* mkdir -p ${Constants.packagesLinuxDownloadPath} curl -L -A "User-Agent Mozilla" $downloadUrl -o ${Constants.packagesLinuxDownloadPath}/$tagname.deb ''')); - for (ProcessResult pr in prs) { - result = pr.exitCode == 0 && result; - } - return result; } else { - // ToDo Windows integration; - return false; + prs = (await shell.run(''' + cmd /c IF EXIST "${Constants.packagesWindowsDownloadPath}" rmdir /s /q "${Constants.packagesWindowsDownloadPath}" + cmd /c mkdir "${Constants.packagesWindowsDownloadPath}" + cmd /c curl -L -A "User-Agent Edge" $downloadUrl -o "${Constants.packagesWindowsDownloadPath}\\$tagname.msi" + ''')); + } + for (ProcessResult pr in prs) { + result = pr.exitCode == 0 && result; } + return result; } catch (e) { return false; } } static Future installOta(String tagname) async { - bool result = true; try { + ProcessResult pr; if (Platform.isLinux) { - ProcessResult pr = (await shell.run('pkexec bash -c "ss=0; apt install -y --allow-downgrades -f ${Constants.packagesLinuxDownloadPath}/$tagname.deb || ((ss++)); rm -rf ${Constants.packagesLinuxDownloadPath}/* || ((ss++)); exit \$ss"'))[0]; - result = pr.exitCode == 0; - return result; + pr = (await shell.run('pkexec bash -c "ss=0; apt install -y --allow-downgrades -f ${Constants.packagesLinuxDownloadPath}/$tagname.deb || ((ss++)); rm -rf ${Constants.packagesLinuxDownloadPath}/* || ((ss++)); exit \$ss"'))[0]; } else { - // ToDo Windows integration; - return false; + pr = (await shell.run('cmd /c ${Constants.packagesWindowsDownloadPath}/$tagname.msi && cmd /c IF EXIST "${Constants.packagesWindowsDownloadPath}" rmdir /s /q "${Constants.packagesWindowsDownloadPath}"'))[0]; } + return pr.exitCode == 0; } catch (e) { return false; }