public async Task<MovieFull> GetMovieFullDetailsAsync(MovieShort movieToLoad, CancellationToken ct)
{
var watch = Stopwatch.StartNew();
var movie = new MovieFull();
var restClient = new RestClient(Constants.YtsApiEndpoint);
var request = new RestRequest("/{segment}", Method.GET);
request.AddUrlSegment("segment", "movie_details.json");
request.AddParameter("movie_id", movieToLoad.Id);
request.AddParameter("with_images", "true");
request.AddParameter("with_cast", "true");
try
{
var response = await restClient.ExecuteGetTaskAsync<WrapperMovieFull>(request, ct);
if (response.ErrorException != null)
throw response.ErrorException;
await Task.Run(async () =>
{
var tmdbInfos = await TmdbClient.GetMovieAsync(response.Data.Data.Movie.ImdbCode,
MovieMethods.Credits);
movie = new MovieFull
{
Id = response.Data.Data.Movie.Id,
Cast = response.Data.Data.Movie.Cast,
BackgroundImagePath = string.Empty,
DateUploaded = response.Data.Data.Movie.DateUploaded,
DateUploadedUnix = response.Data.Data.Movie.DateUploadedUnix,
DescriptionFull = tmdbInfos.Overview,
DescriptionIntro = response.Data.Data.Movie.DescriptionIntro,
DownloadCount = response.Data.Data.Movie.DownloadCount,
FullHdAvailable = response.Data.Data.Movie.Torrents.Any(torrent => torrent.Quality == "1080p"),
Genres = tmdbInfos.Genres.Select(a => a.Name).ToList(),
ImdbCode = response.Data.Data.Movie.ImdbCode,
Language = response.Data.Data.Movie.Language,
LikeCount = response.Data.Data.Movie.LikeCount,
MpaRating = response.Data.Data.Movie.MpaRating,
LargeCoverImage = response.Data.Data.Movie.LargeCoverImage,
PosterImagePath = string.Empty,
RatingValue = response.Data.Data.Movie.Rating,
RtAudienceRating = response.Data.Data.Movie.RtAudienceRating,
RtAudienceScore = response.Data.Data.Movie.RtAudienceScore,
RtCriticsRating = response.Data.Data.Movie.RtCriticsRating,
RtCrtiticsScore = response.Data.Data.Movie.RtCrtiticsScore,
Runtime = response.Data.Data.Movie.Runtime,
Title = tmdbInfos.Title,
TitleLong = response.Data.Data.Movie.TitleLong,
Torrents = response.Data.Data.Movie.Torrents,
Url = response.Data.Data.Movie.Url,
WatchInFullHdQuality = false,
Year = response.Data.Data.Movie.Year,
YtTrailerCode = response.Data.Data.Movie.YtTrailerCode
};
}, ct);
}
catch (Exception exception) when (exception is TaskCanceledException)
{
Logger.Debug(
"GetMovieFullDetailsAsync cancelled.");
}
catch (Exception exception)
{
Logger.Error(
$"GetMovieFullDetailsAsync: {exception.Message}");
throw;
}
finally
{
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
Logger.Debug(
$"GetMovieFullDetailsAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds.");
}
return movie;
}