瀏覽代碼

avoid guest star/actor dupes

Luke Pulverenti 12 年之前
父節點
當前提交
07d8649f97
共有 1 個文件被更改,包括 28 次插入5 次删除
  1. 28 5
      MediaBrowser.Controller/Entities/BaseItem.cs

+ 28 - 5
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -957,7 +957,7 @@ namespace MediaBrowser.Controller.Entities
         {
             if (person == null)
             {
-                throw new ArgumentNullException();
+                throw new ArgumentNullException("person");
             }
 
             if (string.IsNullOrWhiteSpace(person.Name))
@@ -967,14 +967,37 @@ namespace MediaBrowser.Controller.Entities
 
             if (People == null)
             {
-                People = new List<PersonInfo>();
+                People = new List<PersonInfo> { person };
+                return;
             }
 
-            // Check for dupes based on the combination of Name and Type
+            // If the type is GuestStar and there's already an Actor entry, then update it to avoid dupes
+            if (string.Equals(person.Type, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase))
+            {
+                var existing = People.FirstOrDefault(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && p.Type.Equals(PersonType.Actor, StringComparison.OrdinalIgnoreCase));
+
+                if (existing != null)
+                {
+                    existing.Type = PersonType.GuestStar;
+                    return;
+                }
+            }
 
-            if (!People.Any(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && p.Type.Equals(person.Type, StringComparison.OrdinalIgnoreCase)))
+            if (string.Equals(person.Type, PersonType.Actor, StringComparison.OrdinalIgnoreCase))
             {
-                People.Add(person);
+                // Only add actors if there isn't an existing one of type Actor or GuestStar
+                if (!People.Any(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && (p.Type.Equals(PersonType.Actor, StringComparison.OrdinalIgnoreCase) || p.Type.Equals(PersonType.GuestStar, StringComparison.OrdinalIgnoreCase))))
+                {
+                    People.Add(person);
+                }
+            }
+            else
+            {
+                // Check for dupes based on the combination of Name and Type
+                if (!People.Any(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && p.Type.Equals(person.Type, StringComparison.OrdinalIgnoreCase)))
+                {
+                    People.Add(person);
+                }
             }
         }