aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Omdb/OmdbItemProvider.cs')
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs138
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)