summaryrefslogtreecommitdiff
path: root/src/FetchReleases.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/FetchReleases.ts')
-rw-r--r--src/FetchReleases.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/FetchReleases.ts b/src/FetchReleases.ts
new file mode 100644
index 0000000..04f42d6
--- /dev/null
+++ b/src/FetchReleases.ts
@@ -0,0 +1,47 @@
+import {callable} from "@decky/api";
+
+const getBazziteBranch = callable<[], string>("get_bazzite_branch");
+
+export async function isBazziteBranchTesting() {
+ const branch = await getBazziteBranch();
+ return branch === "testing";
+}
+
+export async function* fetchReleases(signal?: AbortSignal) {
+ const branch = await getBazziteBranch();
+ const testing = branch === "stable";
+ let currentPage = 1;
+ let done = false;
+
+ while (!done) {
+ let response: Response;
+ let responseJson: any;
+
+ try {
+ response = await fetch(
+ `https://api.github.com/repos/ublue-os/bazzite/releases?page=${currentPage++}&per_page=10`,
+ { signal });
+
+ if (response.ok) {
+ responseJson = await response.json();
+ } else {
+ responseJson = [];
+ }
+ } catch {
+ responseJson = [];
+ }
+
+ if (!Array.isArray(responseJson) || responseJson.length == 0) {
+ done = true;
+ } else {
+ responseJson.sort((a, b) => (new Date(b.created_at)).getTime() - (new Date(a.created_at)).getTime());
+
+ for (let release of responseJson) {
+ if (release && ((testing && release.prerelease) || (!testing && !release.prerelease)))
+ yield release;
+ }
+ }
+ }
+
+ return undefined;
+}