1
0

fix: artwork cache never throws on body/disk failures

This commit is contained in:
2026-08-29 16:43:45 +02:00
parent 0faa74ae27
commit c1dd232a2f
2 changed files with 32 additions and 12 deletions

View File

@@ -22,20 +22,24 @@ export async function cacheArtwork(
): Promise<string | null> {
if (!url) return null
const key = createHash('sha256').update(url).digest('hex')
mkdirSync(artworkDir, { recursive: true })
for (const ext of Object.values(EXT_BY_TYPE)) {
if (existsSync(path.join(artworkDir, key + ext))) return key + ext
}
let res: Response
try {
res = await fetchImpl(url)
mkdirSync(artworkDir, { recursive: true })
for (const ext of Object.values(EXT_BY_TYPE)) {
if (existsSync(path.join(artworkDir, key + ext))) return key + ext
}
let res: Response
try {
res = await fetchImpl(url)
} catch {
return null
}
if (!res.ok) return null
const type = (res.headers.get('content-type') ?? '').split(';')[0]?.trim() ?? ''
const ext = EXT_BY_TYPE[type] ?? '.jpg'
const buf = Buffer.from(await res.arrayBuffer())
await writeFile(path.join(artworkDir, key + ext), buf)
return key + ext
} catch {
return null
}
if (!res.ok) return null
const type = (res.headers.get('content-type') ?? '').split(';')[0]?.trim() ?? ''
const ext = EXT_BY_TYPE[type] ?? '.jpg'
const buf = Buffer.from(await res.arrayBuffer())
await writeFile(path.join(artworkDir, key + ext), buf)
return key + ext
}