From aabaf1a656e732e5208e251271bd1553c2b576de Mon Sep 17 00:00:00 2001 From: Lampan-git Date: Thu, 20 Mar 2025 05:55:51 -0400 Subject: [PATCH] Backport pull request #13720 from jellyfin/release-10.10.z Fix regression where "Search for missing metadata" not handling cast having multiple roles Original-merge: 91ca81eca7d2c984a096a396cbd83d0111f41c9d Merged-by: Bond-009 Backported-by: Bond_009 --- .../Manager/MetadataService.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 1d3ddc4e24..e8994693de 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -1146,13 +1146,24 @@ namespace MediaBrowser.Providers.Manager private static void MergePeople(IReadOnlyList source, IReadOnlyList target) { - foreach (var person in target) - { - var normalizedName = person.Name.RemoveDiacritics(); - var personInSource = source.FirstOrDefault(i => string.Equals(i.Name.RemoveDiacritics(), normalizedName, StringComparison.OrdinalIgnoreCase)); + var sourceByName = source.ToLookup(p => p.Name.RemoveDiacritics(), StringComparer.OrdinalIgnoreCase); + var targetByName = target.ToLookup(p => p.Name.RemoveDiacritics(), StringComparer.OrdinalIgnoreCase); - if (personInSource is not null) + foreach (var name in targetByName.Select(g => g.Key)) + { + var targetPeople = targetByName[name].ToArray(); + var sourcePeople = sourceByName[name].ToArray(); + + if (sourcePeople.Length == 0) { + continue; + } + + for (int i = 0; i < targetPeople.Length; i++) + { + var person = targetPeople[i]; + var personInSource = i < sourcePeople.Length ? sourcePeople[i] : sourcePeople[0]; + foreach (var providerId in personInSource.ProviderIds) { person.ProviderIds.TryAdd(providerId.Key, providerId.Value);