コード例 #1
0
ファイル: MovieService.cs プロジェクト: bbougot/Popcorn
        /// <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.");
            }
        }
コード例 #2
0
        /// <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.");

        }
コード例 #3
0
ファイル: MovieService.cs プロジェクト: bbougot/Popcorn
        /// <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;
        }