navidrome/core/artwork
Deluan 381dce0363 fix(artwork): never record absent after a local I/O failure
Local sources swallowed their open errors, so a stale NFS/SMB mount was
indistinguishable from "this entity has no artwork": the chain returned
no reader, processItem took the absent branch, and the upsert replaced a
good content hash with the empty string. Clients then saw a placeholder
until the 1h request recheck or the 24h stale-absent sweep, and the
orphaned bytes became eligible for the next prune.

A candidate the resolver knows about — a file in the folder listing, a
track's own audio file — failing to open is not evidence of absence, so
it now forces a retry the same way an external agent error does.
2026-07-25 10:06:51 -04:00
..
blurhash feat(artwork): import blurhash encoder from #5797 2026-07-22 15:53:32 -04:00
e2e fix(artwork): register the GIF decoder in core/artwork 2026-07-25 10:02:18 -04:00
agent_images.go feat(artwork): log external image-lookup failures at debug 2026-07-24 18:15:07 -04:00
agent_images_test.go fix(artwork): restore synthetic-artist guard and unicode normalization in agent lookups 2026-07-23 14:08:08 -04:00
animation.go feat(artwork): preserve animated image artwork during resize (#5184) 2026-03-13 18:11:12 -04:00
animation_test.go feat(artwork): preserve animated image artwork during resize (#5184) 2026-03-13 18:11:12 -04:00
artwork_suite_test.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
benchmark_decode_test.go perf(artwork): improve image serving performance with WebP encoding and optimized pipeline (#5181) 2026-03-13 09:35:59 -04:00
benchmark_encode_test.go perf(artwork): improve image serving performance with WebP encoding and optimized pipeline (#5181) 2026-03-13 09:35:59 -04:00
benchmark_helpers_test.go chore: go fix 2026-05-28 22:13:05 -03:00
benchmark_pipeline_test.go feat(artwork): preserve animated image artwork during resize (#5184) 2026-03-13 18:11:12 -04:00
benchmark_tag_test.go perf(artwork): improve image serving performance with WebP encoding and optimized pipeline (#5181) 2026-03-13 09:35:59 -04:00
disc.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
disc_test.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
folders_album.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
folders_artist.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
housekeeping.go feat(artwork): make artwork re-resolution targeted, not blunt 2026-07-24 20:42:14 -04:00
housekeeping_test.go feat(artwork): make artwork re-resolution targeted, not blunt 2026-07-24 20:42:14 -04:00
image_cache.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
image_store.go feat(artwork): add acquisition worker service 2026-07-22 15:53:32 -04:00
image_store_test.go test(artwork): leak/soak coverage and deferred assertions 2026-07-22 15:53:32 -04:00
library_fs.go fix(artwork): preserve the drive when normalizing Windows file:// library paths 2026-07-23 14:08:08 -04:00
library_fs_test.go fix(artwork): open library-backed artwork through its on-disk root 2026-07-23 14:08:08 -04:00
playlist_cover.go fix(artwork): serve a local playlist ExternalImageURL as a file-backed reference 2026-07-23 14:08:08 -04:00
processor.go fix(artwork): never record absent after a local I/O failure 2026-07-25 10:06:51 -04:00
processor_test.go fix(artwork): never record absent after a local I/O failure 2026-07-25 10:06:51 -04:00
prune.go fix(artwork): purge dangling queue rows and guard concurrent re-enqueues 2026-07-22 15:53:32 -04:00
prune_test.go refactor(artwork): thread model.Kind through the artwork API 2026-07-24 16:58:23 -04:00
refresh.go refactor(artwork): thread model.Kind through the artwork API 2026-07-24 16:58:23 -04:00
resize.go feat(artwork): state-backed serving path with provisional read-through 2026-07-23 14:08:08 -04:00
resolve.go fix(artwork): never record absent after a local I/O failure 2026-07-25 10:06:51 -04:00
resolve_test.go fix(artwork): serve a local playlist ExternalImageURL as a file-backed reference 2026-07-23 14:08:08 -04:00
serving.go fix(artwork): run disc resolution for single-disc albums too 2026-07-24 22:12:29 -04:00
serving_test.go fix(artwork): run disc resolution for single-disc albums too 2026-07-24 22:12:29 -04:00
sources.go fix(artwork): never record absent after a local I/O failure 2026-07-25 10:06:51 -04:00
sources_internal_test.go refactor(artwork): migrate readers to storage.MusicFS and add e2e suite (#5379) 2026-04-26 18:16:14 -04:00
testhelpers_test.go refactor(artwork): delete the legacy reader chain, cache warmer, and provider image methods 2026-07-23 14:08:08 -04:00
uploader.go refactor(artwork): thread model.Kind through the artwork API 2026-07-24 16:58:23 -04:00
uploader_test.go refactor(artwork): thread model.Kind through the artwork API 2026-07-24 16:58:23 -04:00
wire_providers.go refactor(artwork): move ImageUploadService to artwork.Uploader 2026-07-24 16:24:19 -04:00
worker.go tune(artwork): 5s backoff base + 12h give-up, drop the cap 2026-07-24 17:27:40 -04:00
worker_soak_test.go refactor(artwork): thread model.Kind through the artwork API 2026-07-24 16:58:23 -04:00
worker_test.go tune(artwork): 5s backoff base + 12h give-up, drop the cap 2026-07-24 17:27:40 -04:00
worker_timing_test.go feat(artwork): precache on acquisition, bump on upload/radio changes, manual re-resolve API 2026-07-23 14:08:08 -04:00