Something went wrong. Try again.
a simple but full-featured web player for OpenSubsonic music servers (Navidrome, Gonic, Ampache, etc) devins.page/tinysub
svelte typescript javascript subsonic gonic navidrome
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869import type { IndexedDbStore } from "./indexedDbStore.svelte.js";import { getOPFSRoot, type OPFSStorage } from "./opfsStorage.js";
const legacyArtPattern = /^art_(.+)_(128|512)$/;const opfsStorageVersion = 1;
const migrateArtFiles = async (storage: OPFSStorage): Promise<void> => { if (!navigator.storage?.getDirectory) return;
const legacyFiles = new Map<string, { low?: string; high?: string }>(); const canonicalFiles = new Set<string>();
for await (const [name, handle] of (await getOPFSRoot()).entries()) { if (handle.kind !== "file") continue; const match = name.match(legacyArtPattern); if (match) { const files = legacyFiles.get(match[1]) ?? {}; files[match[2] === "512" ? "high" : "low"] = name; legacyFiles.set(match[1], files); } else if (name.startsWith("art_")) { canonicalFiles.add(name); } }
for (const [id, files] of legacyFiles) { const canonical = `art_${id}`; if (!canonicalFiles.has(canonical)) { for (const source of [files.high, files.low]) { if (!source) continue; const blob = await storage.readBlob(source); if (!blob) continue; await storage.writeBlob(canonical, blob); break; } }
for (const name of [files.low, files.high]) { if (name) await storage.deleteBlob(name); } }};
export const migrateOfflineStorage = async ( store: IndexedDbStore, storage: OPFSStorage,): Promise<void> => { const currentOpfsVersion = (await store.getMetadata<number>("opfsVersion")) ?? 0; if (currentOpfsVersion >= opfsStorageVersion) return;
try { await globalThis.caches?.delete("getCoverArt"); } catch (err) { console.warn("failed to delete legacy cover art cache:", err); } try { globalThis.indexedDB?.deleteDatabase("tinysub_pwa"); } catch (err) { console.warn("failed to delete legacy sync database:", err); }
try { await migrateArtFiles(storage); await store.setMetadata("opfsVersion", opfsStorageVersion); } catch (err) { console.warn("failed to migrate cached art:", err); }};