Skip to content

Commit

Permalink
feat: integrate github api OTA 4Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
alexVinarskis committed Oct 14, 2023
1 parent 79eadab commit 3a4556a
Showing 1 changed file with 38 additions and 41 deletions.
79 changes: 38 additions & 41 deletions lib/classes/ota_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,38 +13,33 @@ class OtaManager {
static Future<List<String>> checkLatestOta() async {
List<String> result = [];
try {
if (Platform.isLinux) {
ProcessResult pr = (await shell.run('${Constants.githubApiRequest} ${Constants.githubApiReleases}'))[0];
if (pr.exitCode != 0) {
return result;
}
Map<dynamic, dynamic> 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<dynamic, dynamic> json = jsonDecode(pr.stdout.toString());

// fetch download url
if (!json.containsKey(Constants.githubApiFieldAssets)) {
return result;
}
for (Map<dynamic, dynamic> 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<dynamic, dynamic> 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;
}
Expand All @@ -59,36 +54,38 @@ class OtaManager {
static Future<bool> downloadOta(String tagname, String downloadUrl) async {
bool result = true;
try {
List<ProcessResult> prs;
if (Platform.isLinux) {
List<ProcessResult> 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<bool> 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;
}
Expand Down

0 comments on commit 3a4556a

Please sign in to comment.