aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLampan-git <Lampan-git@users.noreply.github.com>2025-03-20 05:55:51 -0400
committerBond_009 <bond.009@outlook.com>2025-03-20 05:55:51 -0400
commitaabaf1a656e732e5208e251271bd1553c2b576de (patch)
tree8550e50fcbe6e8f71a05ecae7365e066847663ce
parent69b07c9f312d9c92000fdcf50914adc03ed5de04 (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>
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs19
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);