/// <summary> /// Translate movie informations (title, description, ...) /// </summary> /// <param name="movieToTranslate">Movie to translate</param> /// <param name="ct">Used to cancel translation</param> /// <returns>Task</returns> public async Task TranslateMovieShortAsync(MovieShort movieToTranslate, CancellationToken ct) { var watch = Stopwatch.StartNew(); try { await Task.Run(async () => { var movie = await TmdbClient.GetMovieAsync(movieToTranslate.ImdbCode, MovieMethods.Credits); movieToTranslate.Title = movie?.Title; movieToTranslate.Genres = movie?.Genres?.Select(a => a.Name).ToList(); }, ct); } catch (Exception exception) when (exception is TaskCanceledException) { Logger.Debug( "TranslateMovieShortAsync cancelled."); } catch (Exception exception) { Logger.Error( $"TranslateMovieShortAsync: {exception.Message}"); throw; } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Debug( $"TranslateMovieShortAsync ({movieToTranslate.ImdbCode}) in {elapsedMs} milliseconds."); } }
/// <summary> /// Get the requested movie /// </summary> /// <param name="movie">The movie to load</param> private async Task LoadMovieAsync(MovieShort movie) { var watch = Stopwatch.StartNew(); Messenger.Default.Send(new LoadMovieMessage()); IsMovieLoading = true; Movie = await _movieService.GetMovieFullDetailsAsync(movie, _cancellationLoadingToken.Token); IsMovieLoading = false; await _movieService.DownloadPosterImageAsync(Movie, _cancellationLoadingToken); await _movieService.DownloadDirectorImageAsync(Movie, _cancellationLoadingToken); await _movieService.DownloadActorImageAsync(Movie, _cancellationLoadingToken); await _movieService.DownloadBackgroundImageAsync(Movie, _cancellationLoadingToken); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Debug($"LoadMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds."); }
/// <summary> /// Get TMDb movie informations /// </summary> /// <param name="movieToLoad">Movie to load</param> /// <param name="ct">Used to cancel loading</param> /// <returns>Movie's full details</returns> 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; }