PeopleHelper.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using MediaBrowser.Model.Entities;
  6. namespace MediaBrowser.Controller.Entities
  7. {
  8. public static class PeopleHelper
  9. {
  10. public static void AddPerson(List<PersonInfo> people, PersonInfo person)
  11. {
  12. ArgumentNullException.ThrowIfNull(person);
  13. if (string.IsNullOrEmpty(person.Name))
  14. {
  15. throw new ArgumentException("The person's name was empty or null.", nameof(person));
  16. }
  17. // Normalize
  18. if (string.Equals(person.Role, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase))
  19. {
  20. person.Type = PersonType.GuestStar;
  21. }
  22. else if (string.Equals(person.Role, PersonType.Director, StringComparison.OrdinalIgnoreCase))
  23. {
  24. person.Type = PersonType.Director;
  25. }
  26. else if (string.Equals(person.Role, PersonType.Producer, StringComparison.OrdinalIgnoreCase))
  27. {
  28. person.Type = PersonType.Producer;
  29. }
  30. else if (string.Equals(person.Role, PersonType.Writer, StringComparison.OrdinalIgnoreCase))
  31. {
  32. person.Type = PersonType.Writer;
  33. }
  34. // If the type is GuestStar and there's already an Actor entry, then update it to avoid dupes
  35. if (string.Equals(person.Type, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase))
  36. {
  37. var existing = people.FirstOrDefault(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && p.Type.Equals(PersonType.Actor, StringComparison.OrdinalIgnoreCase));
  38. if (existing != null)
  39. {
  40. existing.Type = PersonType.GuestStar;
  41. MergeExisting(existing, person);
  42. return;
  43. }
  44. }
  45. if (string.Equals(person.Type, PersonType.Actor, StringComparison.OrdinalIgnoreCase))
  46. {
  47. // If the actor already exists without a role and we have one, fill it in
  48. var existing = people.FirstOrDefault(p => p.Name.Equals(person.Name, StringComparison.OrdinalIgnoreCase) && (p.Type.Equals(PersonType.Actor, StringComparison.OrdinalIgnoreCase) || p.Type.Equals(PersonType.GuestStar, StringComparison.OrdinalIgnoreCase)));
  49. if (existing == null)
  50. {
  51. // Wasn't there - add it
  52. people.Add(person);
  53. }
  54. else
  55. {
  56. // Was there, if no role and we have one - fill it in
  57. if (string.IsNullOrEmpty(existing.Role) && !string.IsNullOrEmpty(person.Role))
  58. {
  59. existing.Role = person.Role;
  60. }
  61. MergeExisting(existing, person);
  62. }
  63. }
  64. else
  65. {
  66. var existing = people.FirstOrDefault(p =>
  67. string.Equals(p.Name, person.Name, StringComparison.OrdinalIgnoreCase) &&
  68. string.Equals(p.Type, person.Type, StringComparison.OrdinalIgnoreCase));
  69. // Check for dupes based on the combination of Name and Type
  70. if (existing == null)
  71. {
  72. people.Add(person);
  73. }
  74. else
  75. {
  76. MergeExisting(existing, person);
  77. }
  78. }
  79. }
  80. private static void MergeExisting(PersonInfo existing, PersonInfo person)
  81. {
  82. existing.SortOrder = person.SortOrder ?? existing.SortOrder;
  83. existing.ImageUrl = person.ImageUrl ?? existing.ImageUrl;
  84. foreach (var id in person.ProviderIds)
  85. {
  86. existing.SetProviderId(id.Key, id.Value);
  87. }
  88. }
  89. }
  90. }