aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-02 12:09:35 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-02 12:09:35 -0500
commit771294e756908b2a20d9c6ac85c9c9e5b0f90637 (patch)
tree4164e3566706d706ca930eafb6b5b74def2d87aa
parente1387a24c16dc1982856f4a87e3c44124e58ac64 (diff)
support more search filters
-rw-r--r--MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs25
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs51
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbSearch.cs60
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs4
-rw-r--r--MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs30
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs3
7 files changed, 105 insertions, 70 deletions
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
index d698b4ce0..29032ca29 100644
--- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
+++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
@@ -22,7 +22,6 @@ namespace MediaBrowser.Providers.BoxSets
{
public class MovieDbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
{
- private readonly CultureInfo _enUs = new CultureInfo("en-US");
private const string GetCollectionInfo3 = @"http://api.themoviedb.org/3/collection/{0}?api_key={1}&append_to_response=images";
internal static MovieDbBoxSetProvider Current;
@@ -78,25 +77,7 @@ namespace MediaBrowser.Providers.BoxSets
return new[] { result };
}
- var results = await new MovieDbSearch(_logger, _json).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
-
- return results.Select(i => GetRemoteSearchResult(i, tmdbImageUrl));
- }
-
- private RemoteSearchResult GetRemoteSearchResult(MovieDbSearch.TmdbMovieSearchResult tmdbResult, string baseImageUrl)
- {
- var result = new RemoteSearchResult
- {
- Name = tmdbResult.name,
-
- SearchProviderName = Name,
-
- ImageUrl = string.IsNullOrEmpty(tmdbResult.poster_path) ? null : (baseImageUrl + tmdbResult.poster_path)
- };
-
- result.SetProviderId(MetadataProviders.Tmdb, tmdbResult.id.ToString(_usCulture));
-
- return result;
+ return await new MovieDbSearch(_logger, _json).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public async Task<MetadataResult<BoxSet>> GetMetadata(BoxSetInfo id, CancellationToken cancellationToken)
@@ -112,7 +93,7 @@ namespace MediaBrowser.Providers.BoxSets
if (searchResult != null)
{
- tmdbId = searchResult.id.ToString(_enUs);
+ tmdbId = searchResult.GetProviderId(MetadataProviders.Tmdb);
}
}
@@ -159,7 +140,7 @@ namespace MediaBrowser.Providers.BoxSets
Overview = obj.overview
};
- item.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_enUs));
+ item.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_usCulture));
return item;
}
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index b6dca5b7d..c6d5d1502 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -45,7 +45,7 @@ namespace MediaBrowser.Providers.Movies
if (searchResult != null)
{
- tmdbId = searchResult.id.ToString(_usCulture);
+ tmdbId = searchResult.GetProviderId(MetadataProviders.Tmdb);
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index 2c47dbc2f..b40158dd7 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -12,6 +12,7 @@ using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;
@@ -35,6 +36,8 @@ namespace MediaBrowser.Providers.Movies
private readonly ILogger _logger;
private readonly ILocalizationManager _localization;
+ private readonly CultureInfo _usCulture = new CultureInfo("en-US");
+
public MovieDbProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILogger logger, ILocalizationManager localization)
{
_jsonSerializer = jsonSerializer;
@@ -46,9 +49,47 @@ namespace MediaBrowser.Providers.Movies
Current = this;
}
- public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
+ public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
{
- return new List<RemoteSearchResult>();
+ return GetMovieSearchResults(searchInfo, cancellationToken);
+ }
+
+ public async Task<IEnumerable<RemoteSearchResult>> GetMovieSearchResults(ItemLookupInfo searchInfo, CancellationToken cancellationToken)
+ {
+ var tmdbSettings = await GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+
+ var tmdbImageUrl = tmdbSettings.images.base_url + "original";
+
+ var tmdbId = searchInfo.GetProviderId(MetadataProviders.Tmdb);
+
+ if (!string.IsNullOrEmpty(tmdbId))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ await EnsureMovieInfo(tmdbId, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false);
+
+ var dataFilePath = GetDataFilePath(tmdbId, searchInfo.MetadataLanguage);
+
+ var obj = _jsonSerializer.DeserializeFromFile<CompleteMovieData>(dataFilePath);
+
+ var remoteResult = new RemoteSearchResult
+ {
+ Name = obj.title ?? obj.original_title ?? obj.name,
+ SearchProviderName = Name,
+ ImageUrl = string.IsNullOrWhiteSpace(obj.poster_path) ? null : tmdbImageUrl + obj.poster_path
+ };
+
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_usCulture));
+
+ if (!string.IsNullOrWhiteSpace(obj.imdb_id))
+ {
+ remoteResult.SetProviderId(MetadataProviders.Imdb, obj.imdb_id);
+ }
+
+ return new[] { remoteResult };
+ }
+
+ return await new MovieDbSearch(_logger, _jsonSerializer).GetMovieSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken)
@@ -57,7 +98,7 @@ namespace MediaBrowser.Providers.Movies
}
public Task<MetadataResult<T>> GetItemMetadata<T>(ItemLookupInfo id, CancellationToken cancellationToken)
- where T : Video, new ()
+ where T : Video, new()
{
var movieDb = new GenericMovieDbInfo<T>(_logger, _jsonSerializer);
@@ -347,10 +388,10 @@ namespace MediaBrowser.Providers.Movies
var dataFilePath = GetDataFilePath(tmdbId, item.GetPreferredMetadataLanguage());
var fileInfo = new FileInfo(dataFilePath);
-
+
return !fileInfo.Exists || _fileSystem.GetLastWriteTimeUtc(fileInfo) > date;
}
-
+
return false;
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Movies/MovieDbSearch.cs
index 24f198f83..500b71a79 100644
--- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbSearch.cs
@@ -1,6 +1,8 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
@@ -29,27 +31,31 @@ namespace MediaBrowser.Providers.Movies
_json = json;
}
- public Task<IEnumerable<TmdbMovieSearchResult>> GetSearchResults(SeriesInfo idInfo, CancellationToken cancellationToken)
+ public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo idInfo, CancellationToken cancellationToken)
{
return GetSearchResults(idInfo, "tv", cancellationToken);
}
- public Task<IEnumerable<TmdbMovieSearchResult>> GetMovieSearchResults(ItemLookupInfo idInfo, CancellationToken cancellationToken)
+ public Task<IEnumerable<RemoteSearchResult>> GetMovieSearchResults(ItemLookupInfo idInfo, CancellationToken cancellationToken)
{
return GetSearchResults(idInfo, "movie", cancellationToken);
}
- public Task<IEnumerable<TmdbMovieSearchResult>> GetSearchResults(BoxSetInfo idInfo, CancellationToken cancellationToken)
+ public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(BoxSetInfo idInfo, CancellationToken cancellationToken)
{
return GetSearchResults(idInfo, "collection", cancellationToken);
}
- private async Task<IEnumerable<TmdbMovieSearchResult>> GetSearchResults(ItemLookupInfo idInfo, string searchType, CancellationToken cancellationToken)
+ private async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(ItemLookupInfo idInfo, string searchType, CancellationToken cancellationToken)
{
var name = idInfo.Name;
var year = idInfo.Year;
int? yearInName = null;
+ var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+
+ var tmdbImageUrl = tmdbSettings.images.base_url + "original";
+
NameParser.ParseName(name, out name, out yearInName);
year = year ?? yearInName;
@@ -60,14 +66,14 @@ namespace MediaBrowser.Providers.Movies
//nope - search for it
//var searchType = item is BoxSet ? "collection" : "movie";
- var results = await GetSearchResults(name, searchType, year, language, cancellationToken).ConfigureAwait(false);
+ var results = await GetSearchResults(name, searchType, year, language, tmdbImageUrl, cancellationToken).ConfigureAwait(false);
if (results.Count == 0)
{
//try in english if wasn't before
if (!string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
- results = await GetSearchResults(name, searchType, year, "en", cancellationToken).ConfigureAwait(false);
+ results = await GetSearchResults(name, searchType, year, "en", tmdbImageUrl, cancellationToken).ConfigureAwait(false);
}
}
@@ -88,21 +94,29 @@ namespace MediaBrowser.Providers.Movies
// Search again if the new name is different
if (!string.Equals(name, originalName))
{
- results = await GetSearchResults(name, searchType, year, language, cancellationToken).ConfigureAwait(false);
+ results = await GetSearchResults(name, searchType, year, language, tmdbImageUrl, cancellationToken).ConfigureAwait(false);
if (results.Count == 0 && !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
//one more time, in english
- results = await GetSearchResults(name, searchType, year, "en", cancellationToken).ConfigureAwait(false);
+ results = await GetSearchResults(name, searchType, year, "en", tmdbImageUrl, cancellationToken).ConfigureAwait(false);
}
}
}
- return results;
+ return results.Where(i =>
+ {
+ if (year.HasValue && i.ProductionYear.HasValue)
+ {
+ return year.Value == i.ProductionYear.Value;
+ }
+
+ return true;
+ });
}
- private async Task<List<TmdbMovieSearchResult>> GetSearchResults(string name, string type, int? year, string language, CancellationToken cancellationToken)
+ private async Task<List<RemoteSearchResult>> GetSearchResults(string name, string type, int? year, string language, string baseImageUrl, CancellationToken cancellationToken)
{
var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, type);
@@ -124,6 +138,32 @@ namespace MediaBrowser.Providers.Movies
return resultTuples.OrderBy(i => GetSearchResultOrder(i.Item1, year))
.ThenBy(i => i.Item2)
.Select(i => i.Item1)
+ .Select(i =>
+ {
+ var remoteResult = new RemoteSearchResult
+ {
+ SearchProviderName = MovieDbProvider.Current.Name,
+ Name = i.title ?? i.original_title ?? i.name,
+ ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path
+ };
+
+ if (!string.IsNullOrWhiteSpace(i.release_date))
+ {
+ DateTime r;
+
+ // These dates are always in this exact format
+ if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r))
+ {
+ remoteResult.PremiereDate = r.ToUniversalTime();
+ remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year;
+ }
+ }
+
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs));
+
+ return remoteResult;
+
+ })
.ToList();
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
index 512fee8f8..78ea3e99c 100644
--- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
@@ -23,9 +23,9 @@ namespace MediaBrowser.Providers.Movies
return MovieDbProvider.Current.GetItemMetadata<Trailer>(info, cancellationToken);
}
- public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TrailerInfo searchInfo, CancellationToken cancellationToken)
+ public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TrailerInfo searchInfo, CancellationToken cancellationToken)
{
- return new List<RemoteSearchResult>();
+ return MovieDbProvider.Current.GetMovieSearchResults(searchInfo, cancellationToken);
}
public string Name
diff --git a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
index 8014ff88a..b149f709a 100644
--- a/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/MovieDbSeriesProvider.cs
@@ -4,7 +4,6 @@ using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
@@ -130,32 +129,7 @@ namespace MediaBrowser.Providers.TV
}
}
- var searchResults = await new MovieDbSearch(_logger, _jsonSerializer).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
-
- return searchResults.Select(i =>
- {
- var remoteResult = new RemoteSearchResult
- {
- SearchProviderName = Name,
- Name = i.name,
- ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : tmdbImageUrl + i.poster_path
- };
-
- if (!string.IsNullOrWhiteSpace(i.release_date))
- {
- DateTime r;
-
- // These dates are always in this exact format
- if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", _usCulture, DateTimeStyles.None, out r))
- {
- remoteResult.PremiereDate = r.ToUniversalTime();
- }
- }
-
- remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(_usCulture));
-
- return remoteResult;
- });
+ return await new MovieDbSearch(_logger, _jsonSerializer).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public async Task<MetadataResult<Series>> GetMetadata(SeriesInfo info, CancellationToken cancellationToken)
@@ -202,7 +176,7 @@ namespace MediaBrowser.Providers.TV
if (searchResult != null)
{
- tmdbId = searchResult.id.ToString(_usCulture);
+ tmdbId = searchResult.GetProviderId(MetadataProviders.Tmdb);
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 192f84a6f..bd315530e 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -7,7 +7,6 @@ using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
-using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Sorting;
@@ -49,7 +48,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
private List<Guid> _channelIdList = new List<Guid>();
private Dictionary<Guid, LiveTvProgram> _programs = new Dictionary<Guid, LiveTvProgram>();
- private SemaphoreSlim _refreshSemaphore = new SemaphoreSlim(1, 1);
+ private readonly SemaphoreSlim _refreshSemaphore = new SemaphoreSlim(1, 1);
public LiveTvManager(IServerConfigurationManager config, IFileSystem fileSystem, ILogger logger, IItemRepository itemRepo, IImageProcessor imageProcessor, IUserDataManager userDataManager, IDtoService dtoService, IUserManager userManager, ILibraryManager libraryManager, ITaskManager taskManager)
{