fix(artwork): do not promote artist folder to album folder

This commit is contained in:
Kendall Garner 2026-07-27 07:43:02 -07:00
parent ecf606e523
commit 69d9b2d452
No known key found for this signature in database
GPG Key ID: 9355F387FE765C94
5 changed files with 59 additions and 25 deletions

View File

@ -37,7 +37,7 @@ func newAlbumArtworkReader(ctx context.Context, artwork *artwork, artID model.Ar
if err != nil {
return nil, err
}
_, imgFiles, imagesUpdateAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, *al)
_, imgFiles, imagesUpdateAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, true, *al)
if err != nil {
return nil, err
}
@ -103,7 +103,7 @@ func (a *albumArtworkReader) fromCoverArtPriority(ctx context.Context, ffmpeg ff
return ff
}
func loadAlbumFoldersPaths(ctx context.Context, ds model.DataStore, albums ...model.Album) ([]string, []string, *time.Time, error) {
func loadAlbumFoldersPaths(ctx context.Context, ds model.DataStore, includeParent bool, albums ...model.Album) ([]string, []string, *time.Time, error) {
var folderIDs []string
for _, album := range albums {
folderIDs = append(folderIDs, album.FolderIDs...)
@ -113,12 +113,14 @@ func loadAlbumFoldersPaths(ctx context.Context, ds model.DataStore, albums ...mo
return nil, nil, nil, err
}
parent, err := albumRootParent(ctx, ds, folders, folderIDs)
if err != nil {
return nil, nil, nil, err
}
if parent != nil {
folders = append(folders, *parent)
if includeParent {
parent, err := albumRootParent(ctx, ds, folders, folderIDs)
if err != nil {
return nil, nil, nil, err
}
if parent != nil {
folders = append(folders, *parent)
}
}
var paths []string

View File

@ -57,7 +57,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(*imagesUpdatedAt).To(Equal(expectedAt))
@ -85,7 +85,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(3))
@ -106,7 +106,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(3))
@ -146,7 +146,7 @@ var _ = Describe("Album Artwork Reader", func() {
ImageFiles: []string{"cover.jpg", "back.jpg"},
}
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(*imagesUpdatedAt).To(Equal(expectedAt))
@ -175,7 +175,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(1))
@ -205,7 +205,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(1))
@ -242,7 +242,7 @@ var _ = Describe("Album Artwork Reader", func() {
ImageFiles: []string{"unrelated.jpg"},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(1))
@ -279,7 +279,7 @@ var _ = Describe("Album Artwork Reader", func() {
ImageFiles: []string{"cover.jpg"},
}
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(*imagesUpdatedAt).To(Equal(expectedAt))
@ -302,7 +302,7 @@ var _ = Describe("Album Artwork Reader", func() {
},
}
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(1))
@ -330,13 +330,45 @@ var _ = Describe("Album Artwork Reader", func() {
ImageFiles: []string{"cover.jpg"},
}
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, album)
paths, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(*imagesUpdatedAt).To(Equal(expectedAt))
Expect(imgFiles).To(HaveLen(1))
Expect(imgFiles[0]).To(Equal("Artist/Album/cover.jpg"))
Expect(repo.getCallCount).To(Equal(1))
Expect(paths).To(Equal([]string{"Artist/Album/disc1", "Artist/Album"}))
})
It("properly responds whether to add parent or not", func() {
repo.result = []model.Folder{
{
ID: "folder1",
Path: "Artist",
Name: "Album",
ParentID: "artistFolder",
ImagesUpdatedAt: now,
ImageFiles: []string{},
},
}
repo.parentResult = &model.Folder{
ID: "artistFolder",
Path: ".",
Name: "Artist",
ParentID: "libraryRoot",
ImagesUpdatedAt: expectedAt,
ImageFiles: []string{"folder.jpg"},
}
paths, _, _, err := loadAlbumFoldersPaths(ctx, ds, false, album)
Expect(err).ToNot(HaveOccurred())
Expect(paths).To(Equal([]string{"Artist/Album"}))
paths, _, _, err = loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(paths).To(Equal([]string{"Artist/Album", "Artist"}))
})
It("does not include parent images when other albums' audio lives under the parent", func() {
@ -362,7 +394,7 @@ var _ = Describe("Album Artwork Reader", func() {
}
repo.hasOtherAudio = true
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(BeEmpty())
@ -389,7 +421,7 @@ var _ = Describe("Album Artwork Reader", func() {
}
repo.otherAudioErr = errors.New("db connection failed")
_, _, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, _, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).To(MatchError("db connection failed"))
})
@ -415,7 +447,7 @@ var _ = Describe("Album Artwork Reader", func() {
}
repo.getErr = errors.New("db connection failed")
_, _, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, _, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).To(MatchError("db connection failed"))
Expect(repo.getCallCount).To(Equal(1))
@ -443,7 +475,7 @@ var _ = Describe("Album Artwork Reader", func() {
}
// parentResult is nil, so Get will return ErrNotFound
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, album)
_, imgFiles, _, err := loadAlbumFoldersPaths(ctx, ds, true, album)
Expect(err).ToNot(HaveOccurred())
Expect(imgFiles).To(HaveLen(1))

View File

@ -54,7 +54,7 @@ func newArtistArtworkReader(ctx context.Context, artwork *artwork, artID model.A
if err != nil {
return nil, err
}
albumPaths, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, als...)
albumPaths, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, false, als...)
if err != nil {
return nil, err
}

View File

@ -43,7 +43,7 @@ func newDiscArtworkReader(ctx context.Context, a *artwork, artID model.ArtworkID
return nil, err
}
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, a.ds, *al)
_, imgFiles, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, a.ds, true, *al)
if err != nil {
return nil, err
}

View File

@ -27,7 +27,7 @@ func newMediafileArtworkReader(ctx context.Context, artwork *artwork, artID mode
if err != nil {
return nil, err
}
_, _, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, *al)
_, _, imagesUpdatedAt, err := loadAlbumFoldersPaths(ctx, artwork.ds, true, *al)
if err != nil {
return nil, err
}