From 5bb4e9091156f7e7ecb6eeb119cbece0476ae288 Mon Sep 17 00:00:00 2001 From: Deluan Date: Mon, 4 May 2026 07:10:27 -0400 Subject: [PATCH] fix(artwork): include ImportedAt in artwork cache key to invalidate stale cache Reverts the Phase 3 UpdatedAt bump (which would change album.UpdatedAt semantics) and instead includes album.ImportedAt in the artwork cache key computation. Since ImportedAt is bumped to time.Now() on every album Put, any Phase 3 correction naturally invalidates cached artwork that was resolved mid-scan with incomplete folder data. --- core/artwork/reader_album.go | 8 +++++--- core/artwork/reader_disc.go | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/artwork/reader_album.go b/core/artwork/reader_album.go index 0dbb88dab..680ce2349 100644 --- a/core/artwork/reader_album.go +++ b/core/artwork/reader_album.go @@ -53,10 +53,12 @@ func newAlbumArtworkReader(ctx context.Context, artwork *artwork, artID model.Ar lib: lib, } a.cacheKey.artID = artID - if a.updatedAt != nil && a.updatedAt.After(al.UpdatedAt) { + a.cacheKey.lastUpdate = al.UpdatedAt + if a.updatedAt != nil && a.updatedAt.After(a.cacheKey.lastUpdate) { a.cacheKey.lastUpdate = *a.updatedAt - } else { - a.cacheKey.lastUpdate = al.UpdatedAt + } + if al.ImportedAt.After(a.cacheKey.lastUpdate) { + a.cacheKey.lastUpdate = al.ImportedAt } return a, nil } diff --git a/core/artwork/reader_disc.go b/core/artwork/reader_disc.go index de0a765f0..9140d6f1e 100644 --- a/core/artwork/reader_disc.go +++ b/core/artwork/reader_disc.go @@ -105,10 +105,12 @@ func newDiscArtworkReader(ctx context.Context, a *artwork, artID model.ArtworkID updatedAt: imagesUpdatedAt, } r.cacheKey.artID = artID - if r.updatedAt != nil && r.updatedAt.After(al.UpdatedAt) { + r.cacheKey.lastUpdate = al.UpdatedAt + if r.updatedAt != nil && r.updatedAt.After(r.cacheKey.lastUpdate) { r.cacheKey.lastUpdate = *r.updatedAt - } else { - r.cacheKey.lastUpdate = al.UpdatedAt + } + if al.ImportedAt.After(r.cacheKey.lastUpdate) { + r.cacheKey.lastUpdate = al.ImportedAt } return r, nil }