private bool DownloadMetadata(PersonInfo i, PeopleMetadataOptions options) { if (i.IsType(PersonType.Actor)) { return options.DownloadActorMetadata; } if (i.IsType(PersonType.Director)) { return options.DownloadDirectorMetadata; } if (i.IsType(PersonType.Composer)) { return options.DownloadComposerMetadata; } if (i.IsType(PersonType.Writer)) { return options.DownloadWriterMetadata; } if (i.IsType(PersonType.Producer)) { return options.DownloadProducerMetadata; } if (i.IsType(PersonType.GuestStar)) { return options.DownloadGuestStarMetadata; } return options.DownloadOtherPeopleMetadata; }
/// <summary> /// Fetches the data from actor node. /// </summary> /// <param name="series">The series.</param> /// <param name="reader">The reader.</param> private void FetchDataFromActorNode(Series series, XmlReader reader) { reader.MoveToContent(); var personInfo = new PersonInfo(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Name": { personInfo.Name = (reader.ReadElementContentAsString() ?? string.Empty).Trim(); break; } case "Role": { personInfo.Role = (reader.ReadElementContentAsString() ?? string.Empty).Trim(); break; } case "SortOrder": { var val = reader.ReadElementContentAsString(); if (!string.IsNullOrWhiteSpace(val)) { int rval; // int.TryParse is local aware, so it can be probamatic, force us culture if (int.TryParse(val, NumberStyles.Integer, UsCulture, out rval)) { personInfo.SortOrder = rval; } } break; } default: reader.Skip(); break; } } } personInfo.Type = PersonType.Actor; if (!string.IsNullOrEmpty(personInfo.Name)) { series.AddPerson(personInfo); } }
private PersonInfo GetPerson(IDataReader reader) { var item = new PersonInfo(); item.ItemId = reader.GetGuid(0); item.Name = reader.GetString(1); if (!reader.IsDBNull(2)) { item.Role = reader.GetString(2); } if (!reader.IsDBNull(3)) { item.Type = reader.GetString(3); } if (!reader.IsDBNull(4)) { item.SortOrder = reader.GetInt32(4); } return item; }
public static PersonInfo Convert(MazeCastMember mazeMember) { var personInfo = new PersonInfo(); personInfo.ProviderIds[MetadataProviders.TvMaze.ToString()] = mazeMember.person.id.ToString(); personInfo.Name = mazeMember.person.name; personInfo.Role = mazeMember.character.name; personInfo.Type = PersonType.Actor; if (mazeMember.person.image != null && mazeMember.person.image.original != null) { personInfo.ImageUrl = mazeMember.person.image.original.ToString(); } return personInfo; }
private static void MergeExisting(PersonInfo existing, PersonInfo person) { existing.SortOrder = person.SortOrder ?? existing.SortOrder; existing.ImageUrl = person.ImageUrl ?? existing.ImageUrl; foreach (var id in person.ProviderIds) { existing.SetProviderId(id.Key, id.Value); } }
public static void AddPerson(List<PersonInfo> people, PersonInfo person) { if (person == null) { throw new ArgumentNullException("person"); } if (string.IsNullOrWhiteSpace(person.Name)) { throw new ArgumentNullException(); } // Normalize if (string.Equals(person.Role, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.GuestStar; } else if (string.Equals(person.Role, PersonType.Director, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Director; } else if (string.Equals(person.Role, PersonType.Producer, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Producer; } else if (string.Equals(person.Role, PersonType.Writer, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Writer; } // 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; MergeExisting(existing, person); return; } } if (string.Equals(person.Type, PersonType.Actor, StringComparison.OrdinalIgnoreCase)) { // If the actor already exists without a role and we have one, fill it in 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))); if (existing == null) { // Wasn't there - add it people.Add(person); } else { // Was there, if no role and we have one - fill it in if (string.IsNullOrWhiteSpace(existing.Role) && !string.IsNullOrWhiteSpace(person.Role)) { existing.Role = person.Role; } MergeExisting(existing, person); } } else { var existing = people.FirstOrDefault(p => string.Equals(p.Name, person.Name, StringComparison.OrdinalIgnoreCase) && string.Equals(p.Type, person.Type, StringComparison.OrdinalIgnoreCase)); // Check for dupes based on the combination of Name and Type if (existing == null) { people.Add(person); } else { MergeExisting(existing, person); } } }
public static void AddPerson(List <PersonInfo> people, PersonInfo person) { if (person == null) { throw new ArgumentNullException(nameof(person)); } if (string.IsNullOrEmpty(person.Name)) { throw new ArgumentException("The person's name was empty or null.", nameof(person)); } // Normalize if (string.Equals(person.Role, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.GuestStar; } else if (string.Equals(person.Role, PersonType.Director, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Director; } else if (string.Equals(person.Role, PersonType.Producer, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Producer; } else if (string.Equals(person.Role, PersonType.Writer, StringComparison.OrdinalIgnoreCase)) { person.Type = PersonType.Writer; } // 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; MergeExisting(existing, person); return; } } if (string.Equals(person.Type, PersonType.Actor, StringComparison.OrdinalIgnoreCase)) { // If the actor already exists without a role and we have one, fill it in 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))); if (existing == null) { // Wasn't there - add it people.Add(person); } else { // Was there, if no role and we have one - fill it in if (string.IsNullOrEmpty(existing.Role) && !string.IsNullOrEmpty(person.Role)) { existing.Role = person.Role; } MergeExisting(existing, person); } } else { var existing = people.FirstOrDefault(p => string.Equals(p.Name, person.Name, StringComparison.OrdinalIgnoreCase) && string.Equals(p.Type, person.Type, StringComparison.OrdinalIgnoreCase)); // Check for dupes based on the combination of Name and Type if (existing == null) { people.Add(person); } else { MergeExisting(existing, person); } } }
/// <summary> /// Fetches the data from actor node. /// </summary> /// <param name="series">The series.</param> /// <param name="reader">The reader.</param> private void FetchDataFromActorNode(Series series, XmlReader reader) { reader.MoveToContent(); var personInfo = new PersonInfo(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Name": { personInfo.Name = (reader.ReadElementContentAsString() ?? string.Empty).Trim(); break; } case "Role": { personInfo.Role = (reader.ReadElementContentAsString() ?? string.Empty).Trim(); break; } default: reader.Skip(); break; } } } personInfo.Type = PersonType.Actor; if (!string.IsNullOrEmpty(personInfo.Name)) { series.AddPerson(personInfo); } }