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.
This commit is contained in:
Deluan 2026-05-04 07:10:27 -04:00
parent deae5a2c1f
commit a3e581b368
3 changed files with 10 additions and 7 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -103,7 +103,6 @@ func (p *phaseRefreshAlbums) refreshAlbum(album *model.Album) (*model.Album, err
return nil, nil
}
start := time.Now()
album.UpdatedAt = start
err := p.ds.Album(p.ctx).Put(album)
log.Debug(p.ctx, "Scanner: refreshing album", "album_id", album.ID, "name", album.Name, "songCount", album.SongCount, "elapsed", time.Since(start), err)
if err != nil {