fix(library): split compound album artist and re-split artists on rescan
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8a007be036
commit
75f9c57eca
1 file changed
+11
-3
@@ -422,7 +422,13 @@ func (sc *Scanner) apply(ctx context.Context, src Source, patterns []meta.Patter
|
||||
if m.Album == "" {
|
||||
m.Album = UnknownAlbum
|
||||
}
|
||||
albumArtist, err := sc.store.EnsureArtist(ctx, m.AlbumArtist)
|
||||
known := func(k string) bool { return sc.store.ArtistKeyExists(ctx, k) }
|
||||
// Альбом принадлежит одному исполнителю: у составного «A, B» это первый основной.
|
||||
albumArtistName := m.AlbumArtist
|
||||
if credits := meta.SplitArtists(m.AlbumArtist, known); len(credits) > 0 {
|
||||
albumArtistName = credits[0].Name
|
||||
}
|
||||
albumArtist, err := sc.store.EnsureArtist(ctx, albumArtistName)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
@@ -437,7 +443,9 @@ func (sc *Scanner) apply(ctx context.Context, src Source, patterns []meta.Patter
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if !dup {
|
||||
// Тот же файл, перечитанный в тот же трек, заново разбирает исполнителей: правила разбора меняются.
|
||||
sameTrack := dup && r.oldTrack != nil && *r.oldTrack == trackID
|
||||
if !dup || sameTrack {
|
||||
// Перечитанный файл сохраняет свой трек (лайки, история); новый — получает новый.
|
||||
if r.oldTrack != nil {
|
||||
trackID = *r.oldTrack
|
||||
@@ -445,7 +453,7 @@ func (sc *Scanner) apply(ctx context.Context, src Source, patterns []meta.Patter
|
||||
if trackID, err = sc.store.SaveTrack(ctx, trackID, in); err != nil {
|
||||
return false, err
|
||||
}
|
||||
credits := meta.SplitArtists(m.Artist, func(k string) bool { return sc.store.ArtistKeyExists(ctx, k) })
|
||||
credits := meta.SplitArtists(m.Artist, known)
|
||||
ids := make([]uuid.UUID, 0, len(credits))
|
||||
roles := make([]string, 0, len(credits))
|
||||
for _, c := range credits {
|
||||
|
||||
Reference in new issue
Block a user