diff options
| author | Lampan-git <Lampan-git@users.noreply.github.com> | 2025-03-20 05:55:51 -0400 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2025-03-20 05:55:51 -0400 |
| commit | aabaf1a656e732e5208e251271bd1553c2b576de (patch) | |
| tree | 8550e50fcbe6e8f71a05ecae7365e066847663ce /MediaBrowser.Providers/Manager | |
| parent | 69b07c9f312d9c92000fdcf50914adc03ed5de04 (diff) | |
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 <bond.009@outlook.com>
Backported-by: Bond_009 <bond.009@outlook.com>
Diffstat (limited to 'MediaBrowser.Providers/Manager')
| -rw-r--r-- | MediaBrowser.Providers/Manager/MetadataService.cs | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 1d3ddc4e2..e8994693d 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<PersonInfo> source, IReadOnlyList<PersonInfo> target) { - foreach (var person in target) + var sourceByName = source.ToLookup(p => p.Name.RemoveDiacritics(), StringComparer.OrdinalIgnoreCase); + var targetByName = target.ToLookup(p => p.Name.RemoveDiacritics(), StringComparer.OrdinalIgnoreCase); + + foreach (var name in targetByName.Select(g => g.Key)) { - var normalizedName = person.Name.RemoveDiacritics(); - var personInSource = source.FirstOrDefault(i => string.Equals(i.Name.RemoveDiacritics(), normalizedName, StringComparison.OrdinalIgnoreCase)); + var targetPeople = targetByName[name].ToArray(); + var sourcePeople = sourceByName[name].ToArray(); - if (personInSource is not null) + 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); |
