|
@@ -7,6 +7,8 @@ using System.Linq;
|
|
|
using System.Net.Http;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
+using TMDbLib.Objects.Find;
|
|
|
+using TMDbLib.Objects.Search;
|
|
|
using MediaBrowser.Common.Net;
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
using MediaBrowser.Controller.Entities.Movies;
|
|
@@ -43,64 +45,89 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
|
|
|
|
|
|
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MovieInfo searchInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var tmdbId = Convert.ToInt32(searchInfo.GetProviderId(MetadataProvider.Tmdb), CultureInfo.InvariantCulture);
|
|
|
-
|
|
|
- if (tmdbId == 0)
|
|
|
+ if (searchInfo.TryGetProviderId(MetadataProvider.Tmdb, out var id))
|
|
|
{
|
|
|
- var movieResults = await _tmdbClientManager
|
|
|
- .SearchMovieAsync(searchInfo.Name, searchInfo.Year ?? 0, searchInfo.MetadataLanguage, cancellationToken)
|
|
|
+ var movie = await _tmdbClientManager
|
|
|
+ .GetMovieAsync(
|
|
|
+ int.Parse(id, CultureInfo.InvariantCulture),
|
|
|
+ searchInfo.MetadataLanguage,
|
|
|
+ TmdbUtils.GetImageLanguagesParam(searchInfo.MetadataLanguage),
|
|
|
+ cancellationToken)
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
|
- var remoteSearchResults = new List<RemoteSearchResult>();
|
|
|
- for (var i = 0; i < movieResults.Count; i++)
|
|
|
+ var remoteResult = new RemoteSearchResult
|
|
|
{
|
|
|
- var movieResult = movieResults[i];
|
|
|
- var remoteSearchResult = new RemoteSearchResult
|
|
|
- {
|
|
|
- Name = movieResult.Title ?? movieResult.OriginalTitle,
|
|
|
- ImageUrl = _tmdbClientManager.GetPosterUrl(movieResult.PosterPath),
|
|
|
- Overview = movieResult.Overview,
|
|
|
- SearchProviderName = Name
|
|
|
- };
|
|
|
+ Name = movie.Title ?? movie.OriginalTitle,
|
|
|
+ SearchProviderName = Name,
|
|
|
+ ImageUrl = _tmdbClientManager.GetPosterUrl(movie.PosterPath),
|
|
|
+ Overview = movie.Overview
|
|
|
+ };
|
|
|
+
|
|
|
+ if (movie.ReleaseDate != null)
|
|
|
+ {
|
|
|
+ var releaseDate = movie.ReleaseDate.Value.ToUniversalTime();
|
|
|
+ remoteResult.PremiereDate = releaseDate;
|
|
|
+ remoteResult.ProductionYear = releaseDate.Year;
|
|
|
+ }
|
|
|
|
|
|
- var releaseDate = movieResult.ReleaseDate?.ToUniversalTime();
|
|
|
- remoteSearchResult.PremiereDate = releaseDate;
|
|
|
- remoteSearchResult.ProductionYear = releaseDate?.Year;
|
|
|
+ remoteResult.SetProviderId(MetadataProvider.Tmdb, movie.Id.ToString(CultureInfo.InvariantCulture));
|
|
|
|
|
|
- remoteSearchResult.SetProviderId(MetadataProvider.Tmdb, movieResult.Id.ToString(CultureInfo.InvariantCulture));
|
|
|
- remoteSearchResults.Add(remoteSearchResult);
|
|
|
+ if (!string.IsNullOrWhiteSpace(movie.ImdbId))
|
|
|
+ {
|
|
|
+ remoteResult.SetProviderId(MetadataProvider.Imdb, movie.ImdbId);
|
|
|
}
|
|
|
|
|
|
- return remoteSearchResults;
|
|
|
+ return new[] { remoteResult };
|
|
|
}
|
|
|
|
|
|
- var movie = await _tmdbClientManager
|
|
|
- .GetMovieAsync(tmdbId, searchInfo.MetadataLanguage, TmdbUtils.GetImageLanguagesParam(searchInfo.MetadataLanguage), cancellationToken)
|
|
|
- .ConfigureAwait(false);
|
|
|
-
|
|
|
- var remoteResult = new RemoteSearchResult
|
|
|
+ IReadOnlyList<SearchMovie> movieResults;
|
|
|
+ if (searchInfo.TryGetProviderId(MetadataProvider.Imdb, out id))
|
|
|
{
|
|
|
- Name = movie.Title ?? movie.OriginalTitle,
|
|
|
- SearchProviderName = Name,
|
|
|
- ImageUrl = _tmdbClientManager.GetPosterUrl(movie.PosterPath),
|
|
|
- Overview = movie.Overview
|
|
|
- };
|
|
|
-
|
|
|
- if (movie.ReleaseDate != null)
|
|
|
+ var result = await _tmdbClientManager.FindByExternalIdAsync(
|
|
|
+ id,
|
|
|
+ FindExternalSource.Imdb,
|
|
|
+ TmdbUtils.GetImageLanguagesParam(searchInfo.MetadataLanguage),
|
|
|
+ cancellationToken).ConfigureAwait(false);
|
|
|
+ movieResults = result.MovieResults;
|
|
|
+ }
|
|
|
+ else if (searchInfo.TryGetProviderId(MetadataProvider.Tvdb, out id))
|
|
|
{
|
|
|
- var releaseDate = movie.ReleaseDate.Value.ToUniversalTime();
|
|
|
- remoteResult.PremiereDate = releaseDate;
|
|
|
- remoteResult.ProductionYear = releaseDate.Year;
|
|
|
+ var result = await _tmdbClientManager.FindByExternalIdAsync(
|
|
|
+ id,
|
|
|
+ FindExternalSource.TvDb,
|
|
|
+ TmdbUtils.GetImageLanguagesParam(searchInfo.MetadataLanguage),
|
|
|
+ cancellationToken).ConfigureAwait(false);
|
|
|
+ movieResults = result.MovieResults;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ movieResults = await _tmdbClientManager
|
|
|
+ .SearchMovieAsync(searchInfo.Name, searchInfo.Year ?? 0, searchInfo.MetadataLanguage, cancellationToken)
|
|
|
+ .ConfigureAwait(false);
|
|
|
}
|
|
|
|
|
|
- remoteResult.SetProviderId(MetadataProvider.Tmdb, movie.Id.ToString(CultureInfo.InvariantCulture));
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(movie.ImdbId))
|
|
|
+ var len = movieResults.Count;
|
|
|
+ var remoteSearchResults = new RemoteSearchResult[len];
|
|
|
+ for (var i = 0; i < len; i++)
|
|
|
{
|
|
|
- remoteResult.SetProviderId(MetadataProvider.Imdb, movie.ImdbId);
|
|
|
+ var movieResult = movieResults[i];
|
|
|
+ var remoteSearchResult = new RemoteSearchResult
|
|
|
+ {
|
|
|
+ Name = movieResult.Title ?? movieResult.OriginalTitle,
|
|
|
+ ImageUrl = _tmdbClientManager.GetPosterUrl(movieResult.PosterPath),
|
|
|
+ Overview = movieResult.Overview,
|
|
|
+ SearchProviderName = Name
|
|
|
+ };
|
|
|
+
|
|
|
+ var releaseDate = movieResult.ReleaseDate?.ToUniversalTime();
|
|
|
+ remoteSearchResult.PremiereDate = releaseDate;
|
|
|
+ remoteSearchResult.ProductionYear = releaseDate?.Year;
|
|
|
+
|
|
|
+ remoteSearchResult.SetProviderId(MetadataProvider.Tmdb, movieResult.Id.ToString(CultureInfo.InvariantCulture));
|
|
|
+ remoteSearchResults[i] = remoteSearchResult;
|
|
|
}
|
|
|
|
|
|
- return new[] { remoteResult };
|
|
|
+ return remoteSearchResults;
|
|
|
}
|
|
|
|
|
|
public async Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken)
|