Correct Album Artists merge logic (#14655)

* Correct Album Artists merge logic and Artist equality checks

Correct Album Artists merge logic in MetadataService that causes empty
metadata sources to overwrite populated Album Artists arrays. This impacted
People-to-BaseItem relationships and caused orphaned records in Peoples.

Correct equality checks to be case-sensitive so Jelly metadata exactly
matches file metadata.

* use StringComparer.Ordinal

---------

Co-authored-by: Evan <evan@MacBook-Pro.local>
This commit is contained in:
evan314159 2025-09-01 19:22:55 +08:00 committed by GitHub
parent d65b18a7f3
commit a0d4ae1974
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 4 additions and 4 deletions

View File

@ -109,14 +109,14 @@ public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
var albumArtists = songs
.SelectMany(i => i.AlbumArtists)
.GroupBy(i => i)
.GroupBy(i => i, StringComparer.OrdinalIgnoreCase)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.ToArray();
updateType |= SetProviderIdFromSongs(item, songs, MetadataProvider.MusicBrainzAlbumArtist);
if (!item.AlbumArtists.SequenceEqual(albumArtists, StringComparer.OrdinalIgnoreCase))
if (!item.AlbumArtists.SequenceEqual(albumArtists, StringComparer.Ordinal))
{
item.AlbumArtists = albumArtists;
updateType |= ItemUpdateType.MetadataEdit;
@ -131,12 +131,12 @@ public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
var artists = songs
.SelectMany(i => i.Artists)
.GroupBy(i => i)
.GroupBy(i => i, StringComparer.OrdinalIgnoreCase)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.ToArray();
if (!item.Artists.SequenceEqual(artists, StringComparer.OrdinalIgnoreCase))
if (!item.Artists.SequenceEqual(artists, StringComparer.Ordinal))
{
item.Artists = artists;
updateType |= ItemUpdateType.MetadataEdit;