mirror of
https://github.com/navidrome/navidrome.git
synced 2026-08-01 07:21:17 +00:00
feat(artwork): hydrate the parent album's artwork state onto tracks
This commit is contained in:
parent
9bb685a6af
commit
f9aaff7d7f
@ -26,6 +26,10 @@ type MediaFile struct {
|
||||
Bookmarkable `structs:"-" hash:"ignore"`
|
||||
ItemImage `structs:"-" hash:"ignore"`
|
||||
|
||||
// AlbumImage is the parent album's artwork state, hydrated alongside the track's own so a
|
||||
// song's Jellyfin album-art tag can be pixel-versioned without a second query.
|
||||
AlbumImage ItemImage `structs:"-" json:"-" hash:"ignore"`
|
||||
|
||||
ID string `structs:"id" json:"id" hash:"ignore"`
|
||||
PID string `structs:"pid" json:"-" hash:"ignore"`
|
||||
LibraryID int `structs:"library_id" json:"libraryId" hash:"ignore"`
|
||||
|
||||
@ -241,6 +241,7 @@ func (r *mediaFileRepository) hydrateArtwork(mfs model.MediaFiles) {
|
||||
mfInfos := hydrateItemImages(r.ctx, r.db, model.KindMediaFileArtwork.Prefix(), eligibleIDs)
|
||||
for i := range mfs {
|
||||
mf := &mfs[i]
|
||||
applyItemImage(albumInfos, mf.AlbumID, &mf.AlbumImage)
|
||||
eligible := mf.HasCoverArt && conf.Server.EnableMediaFileCoverArt
|
||||
ownInfo, ownResolved := mfInfos[mf.ID]
|
||||
if eligible && ownResolved && !ownInfo.Absent() {
|
||||
|
||||
@ -1093,4 +1093,29 @@ var _ = Describe("MediaRepository", func() {
|
||||
_ = mr.Delete(newID)
|
||||
})
|
||||
})
|
||||
|
||||
Describe("AlbumImage hydration", func() {
|
||||
It("carries the parent album's artwork state onto each track", func() {
|
||||
mfs := model.MediaFiles{{ID: "mf-1", AlbumID: "al-1"}}
|
||||
infos := map[string]model.ItemArtworkInfo{
|
||||
"al-1": {ItemID: "al-1", Hash: "0123456789abcdef", BlurHash: "LEHV6nWB2yk8"},
|
||||
}
|
||||
applyItemImage(infos, mfs[0].AlbumID, &mfs[0].AlbumImage)
|
||||
|
||||
Expect(mfs[0].AlbumImage.ImageHash).To(Equal("0123456789abcdef"))
|
||||
Expect(mfs[0].AlbumImage.BlurHash).To(Equal("LEHV6nWB2yk8"))
|
||||
Expect(mfs[0].AlbumImage.ImageAbsent).To(BeFalse())
|
||||
})
|
||||
|
||||
It("keeps the album state independent of the track's own art", func() {
|
||||
mf := model.MediaFile{ID: "mf-2", AlbumID: "al-2"}
|
||||
mf.ImageHash = "aaaaaaaaaaaaaaaa" // the track's own art
|
||||
applyItemImage(
|
||||
map[string]model.ItemArtworkInfo{"al-2": {ItemID: "al-2", Hash: "bbbbbbbbbbbbbbbb"}},
|
||||
mf.AlbumID, &mf.AlbumImage,
|
||||
)
|
||||
Expect(mf.ImageHash).To(Equal("aaaaaaaaaaaaaaaa"))
|
||||
Expect(mf.AlbumImage.ImageHash).To(Equal("bbbbbbbbbbbbbbbb"))
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user