Correct Album Artists merge logic (#14655)
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
OpenAPI / OpenAPI - HEAD (push) Has been cancelled
OpenAPI / OpenAPI - BASE (push) Has been cancelled
OpenAPI / OpenAPI - Difference (push) Has been cancelled
OpenAPI / OpenAPI - Publish Unstable Spec (push) Has been cancelled
OpenAPI / OpenAPI - Publish Stable Spec (push) Has been cancelled
Tests / run-tests (macos-latest) (push) Has been cancelled
Tests / run-tests (ubuntu-latest) (push) Has been cancelled
Tests / run-tests (windows-latest) (push) Has been cancelled
Project Automation / Project board (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
Stale PR Check / Check PRs with merge conflicts (push) Has been cancelled

* 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

View File

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