aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-10-05 21:31:10 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-10-05 21:31:10 -0400
commit5daca3238ebda99719c3271217f1772e8b07f9a5 (patch)
treea12c38ce2659b478183d63aea3f0b2bde408da97
parent47b428b36c5934c21b462b143716c664c2d2b4a9 (diff)
parent44a555954205a6ff510d7eb76e856748b5664ab3 (diff)
Merge branch 'dev' of https://github.com/MediaBrowser/Emby into dev
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbSearch.cs112
-rw-r--r--MediaBrowser.Providers/Omdb/OmdbItemProvider.cs3
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs14
3 files changed, 126 insertions, 3 deletions
diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Movies/MovieDbSearch.cs
index 6fb795411..e8eeab9c5 100644
--- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbSearch.cs
@@ -125,6 +125,18 @@ namespace MediaBrowser.Providers.Movies
private async Task<List<RemoteSearchResult>> GetSearchResults(string name, string type, int? year, string language, string baseImageUrl, CancellationToken cancellationToken)
{
+ switch (type)
+ {
+ case "tv":
+ return await GetSearchResultsTv(name, year, language, baseImageUrl, cancellationToken);
+ default:
+ return await GetSearchResultsGeneric(name, type, year, language, baseImageUrl, cancellationToken);
+ }
+ }
+
+ private async Task<List<RemoteSearchResult>> GetSearchResultsGeneric(string name, string type, int? year, string language, string baseImageUrl, CancellationToken cancellationToken)
+ {
+
var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, type);
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
@@ -153,7 +165,7 @@ namespace MediaBrowser.Providers.Movies
Name = i.title ?? i.name ?? i.original_title,
ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path
};
-
+
if (!string.IsNullOrWhiteSpace(i.release_date))
{
DateTime r;
@@ -175,6 +187,58 @@ namespace MediaBrowser.Providers.Movies
}
}
+ private async Task<List<RemoteSearchResult>> GetSearchResultsTv(string name, int? year, string language, string baseImageUrl, CancellationToken cancellationToken)
+ {
+ var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, "tv");
+
+ using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ {
+ Url = url3,
+ CancellationToken = cancellationToken,
+ AcceptHeader = AcceptHeader
+
+ }).ConfigureAwait(false))
+ {
+ var searchResults = _json.DeserializeFromStream<TmdbTvSearchResults>(json);
+
+ var results = searchResults.results ?? new List<TvResult>();
+
+ var index = 0;
+ var resultTuples = results.Select(result => new Tuple<TvResult, int>(result, index++)).ToList();
+
+ 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.name ?? i.original_name,
+ ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path
+ };
+
+ if (!string.IsNullOrWhiteSpace(i.first_air_date))
+ {
+ DateTime r;
+
+ // These dates are always in this exact format
+ if (DateTime.TryParseExact(i.first_air_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();
+ }
+ }
+
private int GetSearchResultOrder(TmdbMovieSearchResult result, int? year)
{
if (year.HasValue)
@@ -192,6 +256,23 @@ namespace MediaBrowser.Providers.Movies
return int.MaxValue;
}
+ private int GetSearchResultOrder(TvResult result, int? year)
+ {
+ if (year.HasValue)
+ {
+ DateTime r;
+
+ // These dates are always in this exact format
+ if (DateTime.TryParseExact(result.first_air_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out r))
+ {
+ // Allow one year tolernace, preserve order from Tmdb
+ return Math.Abs(r.Year - year.Value);
+ }
+ }
+
+ return int.MaxValue;
+ }
+
/// <summary>
/// Class TmdbMovieSearchResult
/// </summary>
@@ -288,9 +369,9 @@ namespace MediaBrowser.Providers.Movies
public class TvResult
{
public string backdrop_path { get; set; }
+ public string first_air_date { get; set; }
public int id { get; set; }
public string original_name { get; set; }
- public string first_air_date { get; set; }
public string poster_path { get; set; }
public double popularity { get; set; }
public string name { get; set; }
@@ -298,6 +379,33 @@ namespace MediaBrowser.Providers.Movies
public int vote_count { get; set; }
}
+ /// <summary>
+ /// Class TmdbTvSearchResults
+ /// </summary>
+ private class TmdbTvSearchResults
+ {
+ /// <summary>
+ /// Gets or sets the page.
+ /// </summary>
+ /// <value>The page.</value>
+ public int page { get; set; }
+ /// <summary>
+ /// Gets or sets the results.
+ /// </summary>
+ /// <value>The results.</value>
+ public List<TvResult> results { get; set; }
+ /// <summary>
+ /// Gets or sets the total_pages.
+ /// </summary>
+ /// <value>The total_pages.</value>
+ public int total_pages { get; set; }
+ /// <summary>
+ /// Gets or sets the total_results.
+ /// </summary>
+ /// <value>The total_results.</value>
+ public int total_results { get; set; }
+ }
+
public class ExternalIdLookupResult
{
public List<object> movie_results { get; set; }
diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
index 30aa35924..c1ec5061d 100644
--- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
+++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs
@@ -133,7 +133,8 @@ namespace MediaBrowser.Providers.Omdb
item.SetProviderId(MetadataProviders.Imdb, result.imdbID);
int parsedYear;
- if (int.TryParse(result.Year, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear))
+ if (result.Year.Length > 0
+ && int.TryParse(result.Year.Substring(0, Math.Min(result.Year.Length, 4)), NumberStyles.Any, CultureInfo.InvariantCulture, out parsedYear))
{
item.ProductionYear = parsedYear;
}
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
index ca4c31f75..f9817af89 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
@@ -389,6 +389,20 @@ namespace MediaBrowser.Providers.TV
}
}
+ var airDateNode = node.SelectSingleNode("./FirstAired");
+ if (airDateNode != null)
+ {
+ var val = airDateNode.InnerText;
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ DateTime date;
+ if (DateTime.TryParse(val, out date))
+ {
+ searchResult.ProductionYear = date.Year;
+ }
+ }
+ }
+
foreach (var title in titles)
{
if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase))