Better fw update cache handling (#1617)

This commit is contained in:
Eiren Rain
2025-11-08 02:41:48 +03:00
committed by GitHub
3 changed files with 17 additions and 8 deletions

View File

@@ -75,7 +75,12 @@ export function useProvideAppContext(): AppContext {
});
useEffect(() => {
fetchCurrentFirmwareRelease().then((res) => setCurrentFirmwareRelease(res));
const interval = setInterval(() => {
fetchCurrentFirmwareRelease().then((res) => setCurrentFirmwareRelease(res));
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
return {

View File

@@ -55,13 +55,13 @@ export async function cacheWrap(
orDefault: () => Promise<string | null>,
ttl: number | undefined
) {
const realItem = await store.get(key);
const realItem = await cacheGet(key);
if (!realItem) {
const defaultItem = await orDefault();
await cacheSet(key, defaultItem, ttl);
return defaultItem;
} else {
return (await cacheGet(key))!;
return realItem;
}
}

View File

@@ -36,7 +36,6 @@ const todaysRange = (deployData: [number, Date][]): number => {
};
const checkUserCanUpdate = async (url: string, fwVersion: string) => {
if (!url) return true;
const deployDataJson = JSON.parse(
(await cacheWrap(
`firmware-${fwVersion}-deploy`,
@@ -47,7 +46,7 @@ const checkUserCanUpdate = async (url: string, fwVersion: string) => {
60 * 60 * 1000
)) || 'null'
);
if (!deployDataJson) return true;
if (!deployDataJson) return false;
const deployData = (
Object.entries(deployDataJson).map(([key, val]) => {
@@ -90,7 +89,13 @@ export async function fetchCurrentFirmwareRelease(): Promise<FirmwareRelease | n
for (const release of releases) {
const fwAsset = firstAsset(release.assets, 'BOARD_SLIMEVR-firmware.bin');
const fw12Asset = firstAsset(release.assets, 'BOARD_SLIMEVR_V1_2-firmware.bin');
if (!release.assets || (!fwAsset && !fw12Asset) /* || release.prerelease */)
const deployAsset = firstAsset(release.assets, 'deploy.json');
if (
!release.assets ||
!deployAsset ||
(!fwAsset && !fw12Asset) ||
release.prerelease
)
continue;
let version = release.tag_name;
@@ -98,9 +103,8 @@ export async function fetchCurrentFirmwareRelease(): Promise<FirmwareRelease | n
version = version.substring(1);
}
const deployAsset = firstAsset(release.assets, 'deploy.json');
const userCanUpdate = await checkUserCanUpdate(
deployAsset?.browser_download_url,
deployAsset.browser_download_url,
version
);
processedReleses.push({