aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/People
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-19 00:21:03 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-19 00:21:03 -0500
commit4e38c3537398b01776f6e1c5e1c08bce73eec82e (patch)
tree3fc399f51419d6aae3ae8d96769995cc28191d1f /MediaBrowser.Providers/People
parentcf4ae16f18376c38fed7a8fcaefdc883893473a2 (diff)
fixed remote control flyout
Diffstat (limited to 'MediaBrowser.Providers/People')
-rw-r--r--MediaBrowser.Providers/People/MovieDbPersonProvider.cs94
1 files changed, 75 insertions, 19 deletions
diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
index f439f4bc5c..5691190dc5 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
+using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
@@ -21,9 +22,9 @@ namespace MediaBrowser.Providers.People
public class MovieDbPersonProvider : IRemoteMetadataProvider<Person, PersonLookupInfo>
{
const string DataFileName = "info.json";
-
+
internal static MovieDbPersonProvider Current { get; private set; }
-
+
private readonly IJsonSerializer _jsonSerializer;
private readonly IFileSystem _fileSystem;
private readonly IServerConfigurationManager _configurationManager;
@@ -41,6 +42,73 @@ namespace MediaBrowser.Providers.People
get { return "TheMovieDb"; }
}
+ public async Task<IEnumerable<SearchResult<PersonLookupInfo>>> GetSearchResults(PersonLookupInfo searchInfo, CancellationToken cancellationToken)
+ {
+ var tmdbId = searchInfo.GetProviderId(MetadataProviders.Tmdb);
+
+ var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+
+ var tmdbImageUrl = tmdbSettings.images.base_url + "original";
+
+ if (!string.IsNullOrEmpty(tmdbId))
+ {
+ await EnsurePersonInfo(tmdbId, cancellationToken).ConfigureAwait(false);
+
+ var dataFilePath = GetPersonDataFilePath(_configurationManager.ApplicationPaths, tmdbId);
+ var info = _jsonSerializer.DeserializeFromFile<PersonResult>(dataFilePath);
+
+ var images = (info.images ?? new Images()).profiles ?? new List<Profile>();
+
+ var result = new SearchResult<PersonLookupInfo>
+ {
+ Item = new PersonLookupInfo
+ {
+ Name = info.name
+ },
+
+ ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].file_path)
+ };
+
+ result.Item.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
+ result.Item.SetProviderId(MetadataProviders.Imdb, info.imdb_id.ToString(_usCulture));
+
+ return new[] { result };
+ }
+
+ var url = string.Format(@"http://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey);
+
+ using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ {
+ Url = url,
+ CancellationToken = cancellationToken,
+ AcceptHeader = MovieDbProvider.AcceptHeader
+
+ }).ConfigureAwait(false))
+ {
+ var result = _jsonSerializer.DeserializeFromStream<PersonSearchResults>(json) ??
+ new PersonSearchResults();
+
+ return result.Results.Select(i => GetSearchResult(i, tmdbImageUrl));
+ }
+ }
+
+ private SearchResult<PersonLookupInfo> GetSearchResult(PersonSearchResult i, string baseImageUrl)
+ {
+ var result = new SearchResult<PersonLookupInfo>
+ {
+ Item = new PersonLookupInfo
+ {
+ Name = i.Name
+ },
+
+ ImageUrl = string.IsNullOrEmpty(i.Profile_Path) ? null : (baseImageUrl + i.Profile_Path)
+ };
+
+ result.Item.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(_usCulture));
+
+ return result;
+ }
+
public async Task<MetadataResult<Person>> GetMetadata(PersonLookupInfo id, CancellationToken cancellationToken)
{
var tmdbId = id.GetProviderId(MetadataProviders.Tmdb);
@@ -48,7 +116,7 @@ namespace MediaBrowser.Providers.People
// We don't already have an Id, need to fetch it
if (string.IsNullOrEmpty(tmdbId))
{
- tmdbId = await GetTmdbId(id.Name, cancellationToken).ConfigureAwait(false);
+ tmdbId = await GetTmdbId(id, cancellationToken).ConfigureAwait(false);
}
var result = new MetadataResult<Person>();
@@ -100,26 +168,14 @@ namespace MediaBrowser.Providers.People
/// <summary>
/// Gets the TMDB id.
/// </summary>
- /// <param name="name">The name.</param>
+ /// <param name="info">The information.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{System.String}.</returns>
- private async Task<string> GetTmdbId(string name, CancellationToken cancellationToken)
+ private async Task<string> GetTmdbId(PersonLookupInfo info, CancellationToken cancellationToken)
{
- string url = string.Format(@"http://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(name), MovieDbProvider.ApiKey);
- PersonSearchResults searchResult = null;
-
- using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
- {
- Url = url,
- CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
-
- }).ConfigureAwait(false))
- {
- searchResult = _jsonSerializer.DeserializeFromStream<PersonSearchResults>(json);
- }
+ var results = await GetSearchResults(info, cancellationToken).ConfigureAwait(false);
- return searchResult != null && searchResult.Total_Results > 0 ? searchResult.Results[0].Id.ToString(_usCulture) : null;
+ return results.Select(i => i.Item.GetProviderId(MetadataProviders.Tmdb)).FirstOrDefault();
}
internal async Task EnsurePersonInfo(string id, CancellationToken cancellationToken)