diff options
| author | softworkz <softworkz@hotmail.com> | 2016-07-01 22:03:36 +0200 |
|---|---|---|
| committer | softworkz <softworkz@hotmail.com> | 2016-07-01 22:06:04 +0200 |
| commit | c022b728f8570a89973e7690bfdf80e245aa2690 (patch) | |
| tree | eee909b4d7e8e955b2bcf8799ee0d6527d982e66 | |
| parent | c100f0818c3e882948f26dcdd9d7df461c59fe8f (diff) | |
OMDB improvements
- Improved parsing of production year (cases like '2001-2003')
- Parse writer field as person
- Parse director field as person
- Parse actors fields as persons
| -rw-r--r-- | MediaBrowser.Providers/Omdb/OmdbItemProvider.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Omdb/OmdbProvider.cs | 68 | ||||
| -rw-r--r-- | MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs | 2 |
3 files changed, 62 insertions, 12 deletions
diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index 7a803eb6f..914b775af 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -226,7 +226,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; @@ -265,7 +265,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index 397107c74..d3692f7c6 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; using System; @@ -34,13 +35,16 @@ namespace MediaBrowser.Providers.Omdb _configurationManager = configurationManager; } - public async Task Fetch(BaseItem item, string imdbId, string language, string country, CancellationToken cancellationToken) + public async Task Fetch<T>(MetadataResult<T> itemResult, string imdbId, string language, string country, CancellationToken cancellationToken) + where T :BaseItem { if (string.IsNullOrWhiteSpace(imdbId)) { throw new ArgumentNullException("imdbId"); } + T item = itemResult.Item; + var result = await GetRootObject(imdbId, cancellationToken); // Only take the name and rating if the user's language is set to english, since Omdb has no localization @@ -56,8 +60,8 @@ namespace MediaBrowser.Providers.Omdb int year; - if (!string.IsNullOrEmpty(result.Year) - && int.TryParse(result.Year, NumberStyles.Number, _usCulture, out year) + if (!string.IsNullOrEmpty(result.Year) && result.Year.Length >= 4 + && int.TryParse(result.Year.Substring(0, 4), NumberStyles.Number, _usCulture, out year) && year >= 0) { item.ProductionYear = year; @@ -112,16 +116,19 @@ namespace MediaBrowser.Providers.Omdb item.SetProviderId(MetadataProviders.Imdb, result.imdbID); } - ParseAdditionalMetadata(item, result); + ParseAdditionalMetadata(itemResult, result); } - public async Task<bool> FetchEpisodeData(BaseItem item, int episodeNumber, int seasonNumber, string imdbId, string language, string country, CancellationToken cancellationToken) + public async Task<bool> FetchEpisodeData<T>(MetadataResult<T> itemResult, int episodeNumber, int seasonNumber, string imdbId, string language, string country, CancellationToken cancellationToken) + where T : BaseItem { if (string.IsNullOrWhiteSpace(imdbId)) { throw new ArgumentNullException("imdbId"); } + T item = itemResult.Item; + var seasonResult = await GetSeasonRootObject(imdbId, seasonNumber, cancellationToken); RootObject result = null; @@ -154,8 +161,8 @@ namespace MediaBrowser.Providers.Omdb int year; - if (!string.IsNullOrEmpty(result.Year) - && int.TryParse(result.Year, NumberStyles.Number, _usCulture, out year) + if (!string.IsNullOrEmpty(result.Year) && result.Year.Length >= 4 + && int.TryParse(result.Year.Substring(0, 4), NumberStyles.Number, _usCulture, out year) && year >= 0) { item.ProductionYear = year; @@ -210,7 +217,7 @@ namespace MediaBrowser.Providers.Omdb item.SetProviderId(MetadataProviders.Imdb, result.imdbID); } - ParseAdditionalMetadata(item, result); + ParseAdditionalMetadata(itemResult, result); return true; } @@ -376,8 +383,11 @@ namespace MediaBrowser.Providers.Omdb return Path.Combine(dataPath, filename); } - private void ParseAdditionalMetadata(BaseItem item, RootObject result) + private void ParseAdditionalMetadata<T>(MetadataResult<T> itemResult, RootObject result) + where T : BaseItem { + T item = itemResult.Item; + // Grab series genres because imdb data is better than tvdb. Leave movies alone // But only do it if english is the preferred language because this data will not be localized if (ShouldFetchGenres(item) && @@ -417,6 +427,46 @@ namespace MediaBrowser.Providers.Omdb // Imdb plots are usually pretty short hasShortOverview.ShortOverview = result.Plot; } + + if (!string.IsNullOrWhiteSpace(result.Director)) + { + var person = new PersonInfo + { + Name = result.Director.Trim(), + Type = PersonType.Director + }; + + itemResult.AddPerson(person); + } + + if (!string.IsNullOrWhiteSpace(result.Writer)) + { + var person = new PersonInfo + { + Name = result.Director.Trim(), + Type = PersonType.Writer + }; + + itemResult.AddPerson(person); + } + + if (!string.IsNullOrWhiteSpace(result.Actors)) + { + var actorList = result.Actors.Split(','); + foreach (var actor in actorList) + { + if (!string.IsNullOrWhiteSpace(actor)) + { + var person = new PersonInfo + { + Name = actor.Trim(), + Type = PersonType.Actor + }; + + itemResult.AddPerson(person); + } + } + } } private bool ShouldFetchGenres(BaseItem item) diff --git a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs index 21668f014..64e30f47f 100644 --- a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Providers.TV { var seriesImdbId = info.SeriesProviderIds[MetadataProviders.Imdb.ToString()]; - result.HasMetadata = await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).FetchEpisodeData(result.Item, info.IndexNumber.Value, info.ParentIndexNumber.Value, seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + result.HasMetadata = await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).FetchEpisodeData(result, info.IndexNumber.Value, info.ParentIndexNumber.Value, seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; |
