From f9652d7c0663ead8f3151d7e788989fa662c41e6 Mon Sep 17 00:00:00 2001 From: Zack Spear Date: Mon, 20 Nov 2023 18:15:35 -0800 Subject: [PATCH] refactor: updateOs store to match auth repo --- web/store/updateOs.ts | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/web/store/updateOs.ts b/web/store/updateOs.ts index cefc3b12d..9f76d82ea 100644 --- a/web/store/updateOs.ts +++ b/web/store/updateOs.ts @@ -142,7 +142,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => const isAvailableStable = computed(() => available.value ? isVersionStable(available.value) : false); const filteredNextReleases = computed(() => { - if (!osVersion.value) { return undefined; } + if (!osVersion.value) return undefined; if (releases.value?.response?.next) { return releases.value?.response?.next.filter( @@ -155,7 +155,9 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => const filteredPreviewReleases = computed(() => { // if we're on account.unraid.net and the user is not in the download_preview group, don't show preview releases const userNotInGroup = isOnAccountApp.value && isLoggedIn.value && authUserGroups.value && !authUserGroups.value.includes('download_preview'); - if (!osVersion.value || userNotInGroup) { return undefined; } + if (!osVersion.value || userNotInGroup) return undefined; + // if not authed but the current osVersionBranch is test then return an empty array to prevent showing test releases but still showing the test branch in the tabs + if (isOnAccountApp.value && !isLoggedIn.value && osVersionBranch.value === 'preview') return []; if (releases.value?.response?.preview) { return releases.value?.response?.preview.filter( @@ -166,20 +168,29 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => }); const filteredStableReleases = computed(() => { - if (!osVersion.value) { return undefined; } + if (!osVersion.value) return undefined; + + let filteredReleases: Release[] | undefined = undefined; if (releases.value?.response?.stable) { - return releases.value?.response?.stable.filter( + filteredReleases = releases.value?.response?.stable.filter( release => gt(release.version, osVersion.value as string) ); } - return undefined; + // if current osBranch is next, preview, or test we should return the latest stable release regardless if the current version is ahead + if ((!filteredReleases || filteredReleases.length === 0) && osVersionBranch.value !== 'stable') { + filteredReleases = [releases.value?.response?.stable[0]]; + } + + return filteredReleases; }); const filteredTestReleases = computed(() => { // if we're on account.unraid.net and the user is not in the download_test group, don't show test releases const userNotInGroup = isOnAccountApp.value && isLoggedIn.value && authUserGroups.value && !authUserGroups.value.includes('download_test'); - if (!osVersion.value || userNotInGroup) { return undefined; } + if (!osVersion.value || userNotInGroup) return undefined; + // if not authed but the current osVersionBranch is test then return an empty array to prevent showing test releases but still showing the test branch in the tabs + if (isOnAccountApp.value && !isLoggedIn.value && osVersionBranch.value === 'test') return []; if (releases.value?.response?.test) { return releases.value?.response?.test.filter( @@ -190,7 +201,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => }); const allFilteredReleases = computed(() => { - if (!filteredNextReleases.value && !filteredPreviewReleases.value && !filteredStableReleases.value && !filteredTestReleases.value) { + if (!releases.value || !filteredNextReleases.value && !filteredPreviewReleases.value && !filteredStableReleases.value && !filteredTestReleases.value) { return undefined; } @@ -199,7 +210,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => ...(filteredNextReleases.value && { next: [...filteredNextReleases.value] }), ...(filteredPreviewReleases.value && { preview: [...filteredPreviewReleases.value] }), ...(filteredTestReleases.value && { test: [...filteredTestReleases.value] }), - }; + } }); /** @@ -243,7 +254,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => timestamp: Date.now(), response, }; - }; + } const cacheReleasesResponse = () => { localStorage.setItem(RELEASES_LOCAL_STORAGE_KEY, JSON.stringify(releases.value)); @@ -290,7 +301,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => console.debug('[requestReleases] cache VALID', releases.value.response); return releases.value.response; } - } + } // If here we're needing to fetch a new releases…whether it's the first time or b/c the cache was expired try { @@ -336,7 +347,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => return console.error('[checkForUpdate] no releases found'); } - Object.keys(releases.value.response ?? {}).forEach((key) => { + Object.keys(releases.value.response ?? {}).forEach(key => { // this is just to make TS happy (it's already checked above…thanks github copilot for knowing what I needed) if (!releases.value) { return; @@ -352,7 +363,7 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => return; } - branchReleases.find((release) => { + branchReleases.find(release => { if (gt(release.version, osVersion.value)) { // before we set the available version, check if the license key updates have expired to ensure we don't show an update that the user can't install if (regUpdatesExpired.value && releaseDateGtRegExpDate(release.date, regExp.value)) { @@ -372,14 +383,14 @@ export const useUpdateOsStoreGeneric = (payload?: UpdateOsStorePayload) => const findRelease = (searchKey: keyof Release, searchValue: string): Release | null => { const response = releases?.value?.response; - if (!response) { return null; } + if (!response) return null; for (const key of Object.keys(response)) { const branchReleases = response[key as keyof ReleasesResponse]; - if (!branchReleases || branchReleases.length === 0) { continue; } + if (!branchReleases || branchReleases.length === 0) continue; const foundRelease = branchReleases.find(release => release[searchKey] === searchValue); - if (foundRelease) { return foundRelease; } + if (foundRelease) return foundRelease; } return null;