mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-01 07:21:17 +00:00
fix(artwork): requeue playlist cover when its track set changes
A generated-grid cover went stale after track mutations: nothing re-resolved the playlist's artwork, and the request path deliberately never rebuilds the grid, so serveEntity kept returning the old grid hash indefinitely. Enqueue pl artwork from refreshCounters (the choke point for every track-set change); no clear, so the old cover keeps serving until the worker rebuilds.
This commit is contained in:
parent
cfca4a2433
commit
f016192eec
@ -324,6 +324,13 @@ func (r *playlistRepository) refreshCounters(pls *model.Playlist) error {
|
||||
pls.SongCount = int(res.Count)
|
||||
pls.Duration = res.Duration
|
||||
pls.Size = int64(res.Size)
|
||||
// The generated 2x2 grid depends on the track set, so re-resolve the cover whenever it
|
||||
// changes. No clear: the old cover keeps serving until the worker rebuilds (no flicker).
|
||||
item := model.ArtworkQueueItem{ItemKind: "pl", ItemID: pls.ID, ImageType: model.ImageTypePrimary,
|
||||
Priority: model.ArtworkPriorityScan}
|
||||
if err := NewArtworkQueueRepository(r.ctx, r.db).Enqueue(item); err != nil {
|
||||
log.Warn(r.ctx, "could not enqueue playlist artwork after content change", "id", pls.ID, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@ -260,6 +260,21 @@ var _ = Describe("PlaylistRepository", func() {
|
||||
Expect(repo.Exists(newPls.ID)).To(BeFalse())
|
||||
})
|
||||
|
||||
It("enqueues the playlist's artwork when its track set changes", func() {
|
||||
ctx := request.WithUser(log.NewContext(GinkgoT().Context()), model.User{ID: "userid", UserName: "userid", IsAdmin: true})
|
||||
newPls := model.Playlist{Name: "Grid PL", OwnerID: "userid"}
|
||||
newPls.AddMediaFilesByID([]string{"1001", "1002"})
|
||||
Expect(repo.Put(&newPls)).To(Succeed())
|
||||
DeferCleanup(func() { _ = repo.Delete(newPls.ID) })
|
||||
|
||||
queued, err := NewArtworkQueueRepository(ctx, GetDBXBuilder()).DequeueBatch(1000)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(queued).To(ContainElement(SatisfyAll(
|
||||
HaveField("ItemKind", "pl"),
|
||||
HaveField("ItemID", newPls.ID),
|
||||
)))
|
||||
})
|
||||
|
||||
Describe("GetAll", func() {
|
||||
It("returns all playlists from DB", func() {
|
||||
all, err := repo.GetAll()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user