diff options
Diffstat (limited to 'src/FetchReleases.ts')
| -rw-r--r-- | src/FetchReleases.ts | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/FetchReleases.ts b/src/FetchReleases.ts new file mode 100644 index 0000000..9928d37 --- /dev/null +++ b/src/FetchReleases.ts @@ -0,0 +1,46 @@ +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 testing = await isBazziteBranchTesting(); + 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; +} |
