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 == "" {
|
if m.Album == "" {
|
||||||
m.Album = UnknownAlbum
|
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 {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -437,7 +443,9 @@ func (sc *Scanner) apply(ctx context.Context, src Source, patterns []meta.Patter
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if !dup {
|
// Тот же файл, перечитанный в тот же трек, заново разбирает исполнителей: правила разбора меняются.
|
||||||
|
sameTrack := dup && r.oldTrack != nil && *r.oldTrack == trackID
|
||||||
|
if !dup || sameTrack {
|
||||||
// Перечитанный файл сохраняет свой трек (лайки, история); новый — получает новый.
|
// Перечитанный файл сохраняет свой трек (лайки, история); новый — получает новый.
|
||||||
if r.oldTrack != nil {
|
if r.oldTrack != nil {
|
||||||
trackID = *r.oldTrack
|
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 {
|
if trackID, err = sc.store.SaveTrack(ctx, trackID, in); err != nil {
|
||||||
return false, err
|
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))
|
ids := make([]uuid.UUID, 0, len(credits))
|
||||||
roles := make([]string, 0, len(credits))
|
roles := make([]string, 0, len(credits))
|
||||||
for _, c := range credits {
|
for _, c := range credits {
|
||||||
|
|||||||
Reference in new issue
Block a user