diff options
| author | Victor Borges <victor1882@outlook.com> | 2025-05-03 15:19:10 -0300 |
|---|---|---|
| committer | Victor Borges <victor1882@outlook.com> | 2025-05-03 15:19:10 -0300 |
| commit | d97d5f11e7807906cff2cf41cad815fb05b0096c (patch) | |
| tree | f5782c1785fa35586be12d871cfc00a35f0569a5 /src | |
| parent | ba7a86099b321f378b9d18ea025af9730642d8bf (diff) | |
| download | decky-bazzite-buddy-d97d5f11e7807906cff2cf41cad815fb05b0096c.tar.gz decky-bazzite-buddy-d97d5f11e7807906cff2cf41cad815fb05b0096c.zip | |
gets the correct branch now
Diffstat (limited to 'src')
| -rw-r--r-- | src/FetchReleases.ts | 47 | ||||
| -rw-r--r-- | src/PartnerEventStorePatch.tsx | 62 | ||||
| -rwxr-xr-x | src/index.tsx | 21 |
3 files changed, 65 insertions, 65 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; +} diff --git a/src/PartnerEventStorePatch.tsx b/src/PartnerEventStorePatch.tsx index 75b8ed2..f7df4b3 100644 --- a/src/PartnerEventStorePatch.tsx +++ b/src/PartnerEventStorePatch.tsx @@ -6,6 +6,7 @@ import remarkGfm from "remark-gfm" import {unified} from "unified" import html2bbcode from "./html2bbcode"; import {Mutex} from 'async-mutex'; +import {fetchReleases, isBazziteBranchTesting} from "./FetchReleases"; const PartnerEventStore = findModuleExport( (e) => e?.prototype?.InternalLoadAdjacentPartnerEvents @@ -31,15 +32,14 @@ const SteamID = findModuleExport( const steamClanSteamID = "103582791470414830"; const steamClanID = "40893422"; const steamOSAppId = 1675200; -const githubReleasesURI = "https://api.github.com/repos/ublue-os/bazzite/releases"; let generator: AsyncGenerator<any, undefined, unknown>; const mutex = new Mutex(); const cachedGithubReleases: { gid: string, release: any }[] = []; enum SteamEventType { - SmallUpdate = 12, + // SmallUpdate = 12, Update = 13, - BigUpdate = 14, + // BigUpdate = 14, } type SteamTags = { @@ -49,7 +49,7 @@ type SteamTags = { enum SteamOSChannel { Stable = "stablechannel", Beta = "betachannel", - Preview = "previewchannel", + // Preview = "previewchannel", } export function patchPartnerEventStore(): Patch[] { @@ -138,7 +138,7 @@ async function LoadBazziteReleasesAsPartnerEvents(module: any, gid: any, tags: S } if (cachedGithubReleases.length === 0) { - await fetchMoreReleases(countAfter, isBetaOrPreviewChannel(tags)); + await fetchMoreReleases(countAfter); } const releaseIndex = gid ? cachedGithubReleases.findIndex((e: any) => e.gid === gid) : -1; @@ -149,7 +149,7 @@ async function LoadBazziteReleasesAsPartnerEvents(module: any, gid: any, tags: S } else { if (releaseIndex + countAfter + 1 > cachedGithubReleases.length) { const toFetch = releaseIndex + countAfter + 1 - cachedGithubReleases.length; - await fetchMoreReleases(toFetch, isBetaOrPreviewChannel(tags)); + await fetchMoreReleases(toFetch); } releases = cachedGithubReleases.slice(Math.max(releaseIndex - countBefore + 1, 0), releaseIndex + countAfter + 1); @@ -195,7 +195,7 @@ async function LoadBazziteReleasesAsPartnerEvents(module: any, gid: any, tags: S "commentcount": 0, "tags": [ "patchnotes", - isBetaOrPreviewChannel(tags) ? SteamOSChannel.Beta : SteamOSChannel.Stable, + (await isBazziteBranchTesting()) ? SteamOSChannel.Beta : SteamOSChannel.Stable, ], "language": 0, "hidden": 0, @@ -241,7 +241,7 @@ async function LoadBazziteReleasesAsPartnerEvents(module: any, gid: any, tags: S return ret; } -async function fetchMoreReleases(count: number, beta: boolean) { +async function fetchMoreReleases(count: number) { const releases = []; if (!generator && cachedGithubReleases.length === 0) @@ -252,54 +252,10 @@ async function fetchMoreReleases(count: number, beta: boolean) { do { iterator = await generator.next(); const release = iterator.value; - - if (release && ((beta && release.prerelease) || (!beta && !release.prerelease))) - releases.push(release); + releases.push(release); } while (releases.length < count && !iterator.done) for (const release of releases) { cachedGithubReleases.push({gid: String(release.id), release}); } } - -async function* fetchReleases() { - let currentPage = 1; - let done = false; - - while (!done) { - let response: Response; - let responseJson: any; - - try { - response = await fetch(githubReleasesURI + `?page=${currentPage++}&per_page=10`); - - 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) { - yield release; - } - } - } - - return undefined; -} - -function isBetaOrPreviewChannel(tags: SteamTags): boolean { - if (!tags?.require_tags) - return false; - - return tags.require_tags.includes(SteamOSChannel.Beta) - || tags.require_tags.includes(SteamOSChannel.Preview); -} diff --git a/src/index.tsx b/src/index.tsx index 74af918..ed3327f 100755 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,12 +1,13 @@ import {useEffect, useState} from "react"; import {FaClipboardList} from "react-icons/fa"; -import {definePlugin} from "decky-frontend-lib"; import remarkHtml from "remark-html" import remarkParse from "remark-parse" import remarkGfm from "remark-gfm" import {unified} from "unified" import {patchPartnerEventStore} from "./PartnerEventStorePatch"; import {staticClasses} from "@decky/ui"; +import {definePlugin} from "@decky/api" +import {fetchReleases} from "./FetchReleases"; function Content() { const [changelogHtml, setChangelogHtml] = useState<string | null>(null); @@ -14,25 +15,20 @@ function Content() { const [isRefreshing, setIsRefreshing] = useState<boolean>(false); const fetchChangelog = async (signal?: AbortSignal) => { - const url = "https://api.github.com/repos/ublue-os/bazzite/releases/latest"; try { - const response = await fetch(url, { - headers: { - Accept: "application/vnd.github.v3+json", - }, - signal, - }); + const generator = fetchReleases(signal); + const iterator = await generator.next(); - if (!response.ok) { - throw new Error(`Failed to fetch: ${response.statusText}`); + if (!iterator || iterator.done) { + setError("An unknown error occurred while fetching the changelog."); + return; } - const data = await response.json(); const html = await unified() .use(remarkParse) .use(remarkGfm) .use(remarkHtml) - .process(data.body) + .process(iterator.value.body); setChangelogHtml(html.value as string); setError(null); @@ -181,6 +177,7 @@ function Content() { ); } +// noinspection JSUnusedGlobalSymbols export default definePlugin(() => { const patches = patchPartnerEventStore(); |
