diff options
Diffstat (limited to 'MediaBrowser.Providers/Omdb/OmdbItemProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/Omdb/OmdbItemProvider.cs | 138 |
1 files changed, 59 insertions, 79 deletions
diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index 859a8e8e2..596b864f7 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -4,17 +4,17 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.LiveTv; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Channels; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; -using MediaBrowser.Providers.Movies; -using MediaBrowser.Providers.TV; using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; @@ -22,7 +22,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.Omdb { public class OmdbItemProvider : IRemoteMetadataProvider<Series, SeriesInfo>, - IRemoteMetadataProvider<Movie, MovieInfo>, IRemoteMetadataProvider<ChannelVideoItem, ChannelItemLookupInfo> + IRemoteMetadataProvider<Movie, MovieInfo>, IRemoteMetadataProvider<ChannelVideoItem, ChannelItemLookupInfo>, IRemoteMetadataProvider<LiveTvProgram, LiveTvProgramLookupInfo> { private readonly IJsonSerializer _jsonSerializer; private readonly IHttpClient _httpClient; @@ -47,33 +47,49 @@ namespace MediaBrowser.Providers.Omdb return GetSearchResults(searchInfo, "movie", cancellationToken); } + public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(LiveTvProgramLookupInfo searchInfo, CancellationToken cancellationToken) + { + if (!searchInfo.IsMovie) + { + return Task.FromResult<IEnumerable<RemoteSearchResult>>(new List<RemoteSearchResult>()); + } + + return GetSearchResults(searchInfo, "movie", cancellationToken); + } + public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ItemLookupInfo searchInfo, string type, CancellationToken cancellationToken) { var list = new List<RemoteSearchResult>(); var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb); - if (!string.IsNullOrWhiteSpace(imdbId)) - { - return list; - } var url = "http://www.omdbapi.com/?plot=short&r=json"; var name = searchInfo.Name; var year = searchInfo.Year; - var parsedName = _libraryManager.ParseName(name); - var yearInName = parsedName.Year; - name = parsedName.Name; - year = year ?? yearInName; - - if (year.HasValue) + if (!string.IsNullOrWhiteSpace(name)) { - url += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture); + var parsedName = _libraryManager.ParseName(name); + var yearInName = parsedName.Year; + name = parsedName.Name; + year = year ?? yearInName; } + + if (string.IsNullOrWhiteSpace(imdbId)) + { + if (year.HasValue) + { + url += "&y=" + year.Value.ToString(CultureInfo.InvariantCulture); + } - url += "&t=" + WebUtility.UrlEncode(name); - url += "&type=" + type; + url += "&t=" + WebUtility.UrlEncode(name); + url += "&type=" + type; + } + else + { + url += "&i=" + imdbId; + } using (var stream = await _httpClient.Get(new HttpRequestOptions { @@ -81,7 +97,7 @@ namespace MediaBrowser.Providers.Omdb ResourcePool = OmdbProvider.ResourcePool, CancellationToken = cancellationToken, CacheMode = CacheMode.Unconditional, - CacheLength = TimeSpan.FromDays(7) + CacheLength = TimeSpan.FromDays(2) }).ConfigureAwait(false)) { @@ -145,45 +161,39 @@ namespace MediaBrowser.Providers.Omdb Item = new Series() }; - var searchResult = await GetSeriesImdbId(info, cancellationToken).ConfigureAwait(false); - result.Item.Name = searchResult.Item4; - - if (!string.IsNullOrEmpty(searchResult.Item1)) - { - result.Item.SetProviderId(MetadataProviders.Imdb, searchResult.Item1); - } - - if (!string.IsNullOrEmpty(searchResult.Item2)) - { - result.Item.SetProviderId(MetadataProviders.Tmdb, searchResult.Item2); - } - - if (!string.IsNullOrEmpty(searchResult.Item3)) + var imdbId = info.GetProviderId(MetadataProviders.Imdb); + if (string.IsNullOrWhiteSpace(imdbId)) { - result.Item.SetProviderId(MetadataProviders.Tvdb, searchResult.Item3); + imdbId = await GetSeriesImdbId(info, cancellationToken).ConfigureAwait(false); } - var imdbId = result.Item.GetProviderId(MetadataProviders.Imdb); - - if (!string.IsNullOrEmpty(info.GetProviderId(MetadataProviders.Imdb))) + if (!string.IsNullOrEmpty(imdbId)) { result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, cancellationToken) - .ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, cancellationToken).ConfigureAwait(false); } return result; } + public Task<MetadataResult<LiveTvProgram>> GetMetadata(LiveTvProgramLookupInfo info, CancellationToken cancellationToken) + { + if (!info.IsMovie) + { + return Task.FromResult(new MetadataResult<LiveTvProgram>()); + } + return GetMovieResult<LiveTvProgram>(info, cancellationToken); + } + public Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken) { return GetMovieResult<Movie>(info, cancellationToken); } private async Task<MetadataResult<T>> GetMovieResult<T>(ItemLookupInfo info, CancellationToken cancellationToken) - where T : Video, new() + where T : BaseItem, new() { var result = new MetadataResult<T> { @@ -191,18 +201,9 @@ namespace MediaBrowser.Providers.Omdb }; var imdbId = info.GetProviderId(MetadataProviders.Imdb); - - var searchResult = await GetMovieImdbId(info, cancellationToken).ConfigureAwait(false); - result.Item.Name = searchResult.Item3; - - if (string.IsNullOrEmpty(imdbId)) + if (string.IsNullOrWhiteSpace(imdbId)) { - imdbId = searchResult.Item1; - - if (!string.IsNullOrEmpty(searchResult.Item2)) - { - result.Item.SetProviderId(MetadataProviders.Tmdb, searchResult.Item2); - } + imdbId = await GetMovieImdbId(info, cancellationToken).ConfigureAwait(false); } if (!string.IsNullOrEmpty(imdbId)) @@ -210,45 +211,24 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, cancellationToken) - .ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, cancellationToken).ConfigureAwait(false); } return result; } - private async Task<Tuple<string, string, string>> GetMovieImdbId(ItemLookupInfo info, CancellationToken cancellationToken) + private async Task<string> GetMovieImdbId(ItemLookupInfo info, CancellationToken cancellationToken) { - var result = await new GenericMovieDbInfo<Movie>(_logger, _jsonSerializer, _libraryManager).GetMetadata(info, cancellationToken) - .ConfigureAwait(false); - - var imdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Imdb) : null; - var tmdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Tmdb) : null; - var name = result.HasMetadata ? result.Item.Name : null; - - return new Tuple<string, string, string>(imdb, tmdb, name); + var results = await GetSearchResults(info, "movie", cancellationToken).ConfigureAwait(false); + var first = results.FirstOrDefault(); + return first == null ? null : first.GetProviderId(MetadataProviders.Imdb); } - private async Task<Tuple<string, string, string, string>> GetSeriesImdbId(SeriesInfo info, CancellationToken cancellationToken) + private async Task<string> GetSeriesImdbId(SeriesInfo info, CancellationToken cancellationToken) { - //var result = await TvdbSeriesProvider.Current.GetMetadata(info, cancellationToken) - // .ConfigureAwait(false); - - //var imdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Imdb) : null; - //var tvdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Tvdb) : null; - //var name = result.HasMetadata ? result.Item.Name : null; - - //return new Tuple<string, string, string>(imdb, tvdb, name); - - var result = await MovieDbSeriesProvider.Current.GetMetadata(info, cancellationToken) - .ConfigureAwait(false); - - var imdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Imdb) : null; - var tmdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Tmdb) : null; - var tvdb = result.HasMetadata ? result.Item.GetProviderId(MetadataProviders.Tvdb) : null; - var name = result.HasMetadata ? result.Item.Name : null; - - return new Tuple<string, string, string, string>(imdb, tmdb, tvdb, name); + var results = await GetSearchResults(info, cancellationToken).ConfigureAwait(false); + var first = results.FirstOrDefault(); + return first == null ? null : first.GetProviderId(MetadataProviders.Imdb); } public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken) |
