fixes #206 - Adding roles, deleting actors, changing names - not being picked up

This commit is contained in:
Luke Pulverenti 2013-04-28 01:44:45 -04:00
parent b443d591a2
commit c2c081c8e4
7 changed files with 81 additions and 90 deletions

View File

@ -31,6 +31,7 @@ namespace MediaBrowser.Controller.Entities
Studios = new List<string>(); Studios = new List<string>();
People = new List<PersonInfo>(); People = new List<PersonInfo>();
CriticReviews = new List<ItemReview>(); CriticReviews = new List<ItemReview>();
Taglines = new List<string>();
} }
/// <summary> /// <summary>
@ -880,10 +881,10 @@ namespace MediaBrowser.Controller.Entities
OfficialRating = null; OfficialRating = null;
CustomRating = null; CustomRating = null;
Overview = null; Overview = null;
Taglines = null; Taglines.Clear();
Language = null; Language = null;
Studios = null; Studios.Clear();
Genres = null; Genres.Clear();
CommunityRating = null; CommunityRating = null;
RunTimeTicks = null; RunTimeTicks = null;
AspectRatio = null; AspectRatio = null;
@ -1052,24 +1053,6 @@ namespace MediaBrowser.Controller.Entities
return (DateTime.UtcNow - DateCreated).TotalDays < ConfigurationManager.Configuration.RecentItemDays; return (DateTime.UtcNow - DateCreated).TotalDays < ConfigurationManager.Configuration.RecentItemDays;
} }
/// <summary>
/// Adds people to the item
/// </summary>
/// <param name="people">The people.</param>
/// <exception cref="System.ArgumentNullException"></exception>
public void AddPeople(IEnumerable<PersonInfo> people)
{
if (people == null)
{
throw new ArgumentNullException();
}
foreach (var person in people)
{
AddPerson(person);
}
}
/// <summary> /// <summary>
/// Adds a person to the item /// Adds a person to the item
/// </summary> /// </summary>
@ -1087,12 +1070,6 @@ namespace MediaBrowser.Controller.Entities
throw new ArgumentNullException(); throw new ArgumentNullException();
} }
if (People == null)
{
People = new List<PersonInfo> { person };
return;
}
// If the type is GuestStar and there's already an Actor entry, then update it to avoid dupes // 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)) if (string.Equals(person.Type, PersonType.GuestStar, StringComparison.OrdinalIgnoreCase))
{ {
@ -1123,24 +1100,6 @@ namespace MediaBrowser.Controller.Entities
} }
} }
/// <summary>
/// Adds studios to the item
/// </summary>
/// <param name="studios">The studios.</param>
/// <exception cref="System.ArgumentNullException"></exception>
public void AddStudios(IEnumerable<string> studios)
{
if (studios == null)
{
throw new ArgumentNullException();
}
foreach (var name in studios)
{
AddStudio(name);
}
}
/// <summary> /// <summary>
/// Adds a studio to the item /// Adds a studio to the item
/// </summary> /// </summary>
@ -1153,11 +1112,6 @@ namespace MediaBrowser.Controller.Entities
throw new ArgumentNullException("name"); throw new ArgumentNullException("name");
} }
if (Studios == null)
{
Studios = new List<string>();
}
if (!Studios.Contains(name, StringComparer.OrdinalIgnoreCase)) if (!Studios.Contains(name, StringComparer.OrdinalIgnoreCase))
{ {
Studios.Add(name); Studios.Add(name);
@ -1176,11 +1130,6 @@ namespace MediaBrowser.Controller.Entities
throw new ArgumentNullException("name"); throw new ArgumentNullException("name");
} }
if (Taglines == null)
{
Taglines = new List<string>();
}
if (!Taglines.Contains(name, StringComparer.OrdinalIgnoreCase)) if (!Taglines.Contains(name, StringComparer.OrdinalIgnoreCase))
{ {
Taglines.Add(name); Taglines.Add(name);
@ -1222,11 +1171,6 @@ namespace MediaBrowser.Controller.Entities
throw new ArgumentNullException("name"); throw new ArgumentNullException("name");
} }
if (Genres == null)
{
Genres = new List<string>();
}
if (!Genres.Contains(name, StringComparer.OrdinalIgnoreCase)) if (!Genres.Contains(name, StringComparer.OrdinalIgnoreCase))
{ {
Genres.Add(name); Genres.Add(name);
@ -1256,24 +1200,6 @@ namespace MediaBrowser.Controller.Entities
} }
} }
/// <summary>
/// Adds genres to the item
/// </summary>
/// <param name="genres">The genres.</param>
/// <exception cref="System.ArgumentNullException"></exception>
public void AddGenres(IEnumerable<string> genres)
{
if (genres == null)
{
throw new ArgumentNullException();
}
foreach (var name in genres)
{
AddGenre(name);
}
}
/// <summary> /// <summary>
/// Marks the item as either played or unplayed /// Marks the item as either played or unplayed
/// </summary> /// </summary>

View File

@ -58,6 +58,11 @@ namespace MediaBrowser.Controller.Providers
ValidationType = ValidationType.None ValidationType = ValidationType.None
}; };
item.Taglines.Clear();
item.Studios.Clear();
item.Genres.Clear();
item.People.Clear();
// Use XmlReader for best performance // Use XmlReader for best performance
using (var reader = XmlReader.Create(metadataFile, settings)) using (var reader = XmlReader.Create(metadataFile, settings))
{ {
@ -496,7 +501,10 @@ namespace MediaBrowser.Controller.Providers
{ {
case "Person": case "Person":
{ {
item.AddPeople(GetPersonsFromXmlNode(reader.ReadSubtree())); foreach (var person in GetPersonsFromXmlNode(reader.ReadSubtree()))
{
item.AddPerson(person);
}
break; break;
} }

View File

@ -171,7 +171,12 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
val.Split(new[] {'/', '|'}, StringSplitOptions.RemoveEmptyEntries) val.Split(new[] {'/', '|'}, StringSplitOptions.RemoveEmptyEntries)
.Where(i => !string.Equals(i, audio.Artist, StringComparison.OrdinalIgnoreCase) && !string.Equals(i, audio.AlbumArtist, StringComparison.OrdinalIgnoreCase)); .Where(i => !string.Equals(i, audio.Artist, StringComparison.OrdinalIgnoreCase) && !string.Equals(i, audio.AlbumArtist, StringComparison.OrdinalIgnoreCase));
audio.AddStudios(studios); audio.Studios.Clear();
foreach (var studio in studios)
{
audio.AddStudio(studio);
}
} }
} }
@ -186,7 +191,12 @@ namespace MediaBrowser.Controller.Providers.MediaInfo
if (!string.IsNullOrEmpty(val)) if (!string.IsNullOrEmpty(val))
{ {
audio.AddGenres(val.Split(new[] { '/', '|' }, StringSplitOptions.RemoveEmptyEntries)); audio.Genres.Clear();
foreach (var genre in val.Split(new[] { '/', '|' }, StringSplitOptions.RemoveEmptyEntries))
{
audio.AddGenre(genre);
}
} }
} }

View File

@ -909,7 +909,12 @@ namespace MediaBrowser.Controller.Providers.Movies
movie.Budget = movieData.budget; movie.Budget = movieData.budget;
movie.Revenue = movieData.revenue; movie.Revenue = movieData.revenue;
if (!string.IsNullOrEmpty(movieData.tagline)) movie.AddTagline(movieData.tagline); if (!string.IsNullOrEmpty(movieData.tagline))
{
movie.Taglines.Clear();
movie.AddTagline(movieData.tagline);
}
movie.SetProviderId(MetadataProviders.Imdb, movieData.imdb_id); movie.SetProviderId(MetadataProviders.Imdb, movieData.imdb_id);
float rating; float rating;
string voteAvg = movieData.vote_average.ToString(CultureInfo.InvariantCulture); string voteAvg = movieData.vote_average.ToString(CultureInfo.InvariantCulture);
@ -957,15 +962,26 @@ namespace MediaBrowser.Controller.Providers.Movies
//studios //studios
if (movieData.production_companies != null) if (movieData.production_companies != null)
{ {
//always clear so they don't double up movie.Studios.Clear();
movie.AddStudios(movieData.production_companies.Select(c => c.name));
foreach (var studio in movieData.production_companies.Select(c => c.name))
{
movie.AddStudio(studio);
}
} }
//genres //genres
if (movieData.genres != null) if (movieData.genres != null)
{ {
movie.AddGenres(movieData.genres.Select(g => g.name)); movie.Genres.Clear();
foreach (var genre in movieData.genres.Select(g => g.name))
{
movie.AddGenre(genre);
} }
}
movie.People.Clear();
//Actors, Directors, Writers - all in People //Actors, Directors, Writers - all in People
//actors come from cast //actors come from cast

View File

@ -61,6 +61,8 @@ namespace MediaBrowser.Controller.Providers.Music
private static void AddGenres(BaseItem item, LastfmTags tags) private static void AddGenres(BaseItem item, LastfmTags tags)
{ {
item.Genres.Clear();
foreach (var tag in tags.tag) foreach (var tag in tags.tag)
{ {
if (!string.IsNullOrEmpty(tag.name)) if (!string.IsNullOrEmpty(tag.name))

View File

@ -260,24 +260,35 @@ namespace MediaBrowser.Controller.Providers.TV
episode.ProductionYear = airDate.Year; episode.ProductionYear = airDate.Year;
} }
episode.People.Clear();
var actors = doc.SafeGetString("//GuestStars"); var actors = doc.SafeGetString("//GuestStars");
if (actors != null) if (actors != null)
{ {
episode.AddPeople(actors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.GuestStar, Name = str })); foreach (var person in actors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.GuestStar, Name = str }))
{
episode.AddPerson(person);
}
} }
var directors = doc.SafeGetString("//Director"); var directors = doc.SafeGetString("//Director");
if (directors != null) if (directors != null)
{ {
episode.AddPeople(directors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.Director, Name = str })); foreach (var person in actors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.Director, Name = str }))
{
episode.AddPerson(person);
}
} }
var writers = doc.SafeGetString("//Writer"); var writers = doc.SafeGetString("//Writer");
if (writers != null) if (writers != null)
{ {
episode.AddPeople(writers.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.Writer, Name = str })); foreach (var person in actors.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(str => new PersonInfo { Type = PersonType.Writer, Name = str }))
{
episode.AddPerson(person);
}
} }
if (ConfigurationManager.Configuration.SaveLocalMeta) if (ConfigurationManager.Configuration.SaveLocalMeta)

View File

@ -232,8 +232,16 @@ namespace MediaBrowser.Controller.Providers.TV
} }
string s = doc.SafeGetString("//Network"); string s = doc.SafeGetString("//Network");
if (!string.IsNullOrWhiteSpace(s)) if (!string.IsNullOrWhiteSpace(s))
series.AddStudios(new List<string>(s.Trim().Split('|'))); {
series.Studios.Clear();
foreach (var studio in s.Trim().Split('|'))
{
series.AddStudio(studio);
}
}
series.OfficialRating = doc.SafeGetString("//ContentRating"); series.OfficialRating = doc.SafeGetString("//ContentRating");
@ -244,7 +252,12 @@ namespace MediaBrowser.Controller.Providers.TV
string[] genres = g.Trim('|').Split('|'); string[] genres = g.Trim('|').Split('|');
if (g.Length > 0) if (g.Length > 0)
{ {
series.AddGenres(genres); series.Genres.Clear();
foreach (var genre in genres)
{
series.AddGenre(genre);
}
} }
} }
@ -305,7 +318,11 @@ namespace MediaBrowser.Controller.Providers.TV
} }
var xmlNodeList = docActors.SelectNodes("Actors/Actor"); var xmlNodeList = docActors.SelectNodes("Actors/Actor");
if (xmlNodeList != null) if (xmlNodeList != null)
{
series.People.Clear();
foreach (XmlNode p in xmlNodeList) foreach (XmlNode p in xmlNodeList)
{ {
string actorName = p.SafeGetString("Name"); string actorName = p.SafeGetString("Name");
@ -331,6 +348,7 @@ namespace MediaBrowser.Controller.Providers.TV
} }
} }
} }
}
/// <summary> /// <summary>
/// Fetches the images. /// Fetches the images.