Esempio n. 1
0
        /// <summary>
        /// Get TMDb movie informations
        /// </summary>
        /// <param name="movieToLoad">Movie to load</param>
        /// <returns>Movie's full details</returns>
        public async Task<MovieFull> GetMovieFullDetailsAsync(MovieShort movieToLoad)
        {
            var watch = Stopwatch.StartNew();

            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);

            var response = await restClient.ExecuteGetTaskAsync(request);
            if (response.ErrorException != null)
            {
                Logger.Error(
                    $"Error while loading the movie {movieToLoad.Title}: {response.ErrorException.Message}");
                Messenger.Default.Send(new ManageExceptionMessage(new WebException(response.ErrorException.Message)));
            }

            var movie = new MovieFull();
            await Task.Run(() =>
            {
                var wrapper = JsonConvert.DeserializeObject<WrapperMovieFullDeserialized>(response.Content);
                if (wrapper == null)
                    return;

                var tmdbInfos = TmdbClient.GetMovie(wrapper.Movie.ImdbCode,
                    MovieMethods.Credits);

                var rating = Convert.ToDouble(wrapper.Movie.Rating, CultureInfo.InvariantCulture);
                rating /= 2.0;

                movie = new MovieFull
                {
                    Id = wrapper.Movie.Id,
                    Actors = wrapper.Movie.Actors,
                    BackgroundImagePath = string.Empty,
                    DateUploaded = wrapper.Movie.DateUploaded,
                    DateUploadedUnix = wrapper.Movie.DateUploadedUnix,
                    DescriptionFull = tmdbInfos.Overview,
                    DescriptionIntro = wrapper.Movie.DescriptionIntro,
                    Directors = wrapper.Movie.Directors,
                    DownloadCount = wrapper.Movie.DownloadCount,
                    FullHdAvailable = wrapper.Movie.Torrents.Any(torrent => torrent.Quality == "1080p"),
                    Genres = tmdbInfos.Genres.Select(a => a.Name).ToList(),
                    Images = wrapper.Movie.Images,
                    ImdbCode = wrapper.Movie.ImdbCode,
                    Language = wrapper.Movie.Language,
                    LikeCount = wrapper.Movie.LikeCount,
                    MpaRating = wrapper.Movie.MpaRating,
                    PosterImagePath = string.Empty,
                    RatingValue = rating,
                    RtAudienceRating = wrapper.Movie.RtAudienceRating,
                    RtAudienceScore = wrapper.Movie.RtAudienceScore,
                    RtCriticsRating = wrapper.Movie.RtCriticsRating,
                    RtCrtiticsScore = wrapper.Movie.RtCrtiticsScore,
                    Runtime = wrapper.Movie.Runtime,
                    Title = tmdbInfos.Title,
                    TitleLong = wrapper.Movie.TitleLong,
                    Torrents = wrapper.Movie.Torrents,
                    Url = wrapper.Movie.Url,
                    WatchInFullHdQuality = false,
                    Year = wrapper.Movie.Year,
                    YtTrailerCode = wrapper.Movie.YtTrailerCode
                };
            });

            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;
            Logger.Debug(
                $"GetMovieFullDetails ({movie.ImdbCode}) in {elapsedMs} milliseconds.");

            return movie;
        }
Esempio n. 2
0
        /// <summary>
        /// Translate movie informations (title, description, ...)
        /// </summary>
        /// <param name="movieToTranslate">Movie to translate</param>
        /// <returns>Task</returns>
        public async Task TranslateMovieShortAsync(MovieShort movieToTranslate)
        {
            var watch = Stopwatch.StartNew();

            await Task.Run(() =>
            {
                try
                {
                    var movie = TmdbClient.GetMovie(movieToTranslate.ImdbCode,
                        MovieMethods.Credits);
                    movieToTranslate.Title = movie.Title;
                    movieToTranslate.Genres = movie.Genres.Select(a => a.Name).ToList();
                }
                catch (Exception ex) when (ex is SocketException || ex is WebException)
                {
                    Logger.Error(
                        $"Error while translating movie {movieToTranslate.Title}: {ex.Message}");
                    Messenger.Default.Send(new ManageExceptionMessage(ex));
                }
            });

            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;
            Logger.Debug(
                $"TranslateMovieShortAsync ({movieToTranslate.ImdbCode}) in {elapsedMs} milliseconds.");
        }
Esempio n. 3
0
 /// <summary>
 /// Get the requested movie
 /// </summary>
 /// <param name="movie">The movie to load</param>
 private async Task LoadMovieAsync(MovieShort movie)
 {
     Messenger.Default.Send(new LoadMovieMessage(movie));
     IsMovieLoading = true;
     try
     {
         Movie = await MovieService.GetMovieFullDetailsAsync(movie);
         IsMovieLoading = false;
         await MovieService.DownloadPosterImageAsync(Movie);
         await MovieService.DownloadDirectorImageAsync(Movie);
         await MovieService.DownloadActorImageAsync(Movie);
         await MovieService.DownloadBackgroundImageAsync(Movie);
     }
     catch (Exception ex) when (ex is SocketException || ex is WebException)
     {
         Messenger.Default.Send(new ManageExceptionMessage(ex));
     }
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="movie">The movie</param>
 public ChangeFavoriteMovieMessage(MovieShort movie)
 {
     Movie = movie;
 }
Esempio n. 5
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="movie">Movie</param>
 public LoadMovieMessage(MovieShort movie)
 {
     Movie = movie;
 }
Esempio n. 6
0
        /// <summary>
        /// Convert a short movie model to a short movie entity
        /// </summary>
        /// <param name="movie">The movie to convert</param>
        /// <returns>Short movie entity</returns>
        private static Entity.Movie.MovieShort MovieShortFromModelToEntity(MovieShort movie)
        {
            var torrents = movie.Torrents.Select(torrent => new Entity.Movie.Torrent
            {
                DateUploaded = torrent.DateUploaded,
                Url = torrent.Url,
                Quality = torrent.Quality,
                DateUploadedMix = torrent.DateUploadedMix,
                Framerate = torrent.Framerate,
                Hash = torrent.Hash,
                Peers = torrent.Peers,
                Resolution = torrent.Resolution,
                Seeds = torrent.Seeds,
                Size = torrent.Size,
                SizeBytes = torrent.SizeBytes
            }).ToList();

            var genres = movie.Genres.Select(genre => new Genre
            {
                Name = genre
            }).ToList();

            var movieShort = new Entity.Movie.MovieShort
            {
                MovieId = movie.Id,
                IsFavorite = movie.IsFavorite,
                HasBeenSeen = movie.HasBeenSeen,
                ServerTime = movie.ServerTime,
                ServerTimezone = movie.ServerTimezone,
                SmallCoverImage = movie.SmallCoverImage,
                State = movie.State,
                Year = movie.Year,
                Language = movie.Language,
                ImdbCode = movie.ImdbCode,
                Title = movie.Title,
                Id = movie.Id,
                DateUploaded = movie.DateUploaded,
                Runtime = movie.Runtime,
                Url = movie.Url,
                TitleLong = movie.TitleLong,
                Torrents = torrents,
                MediumCoverImage = movie.MediumCoverImage,
                Genres = genres,
                DateUploadedUnix = movie.DateUploadedUnix,
                CoverImagePath = movie.CoverImagePath,
                MpaRating = movie.MpaRating,
                Rating = movie.RatingValue,
                ExecutionTime = movie.ExecutionTime,
                ApiVersion = movie.ApiVersion
            };
            return movieShort;
        }
Esempio n. 7
0
        /// <summary>
        /// Set the movie as favorite
        /// </summary>
        /// <param name="movie">Favorite movie</param>
        public static async Task SetFavoriteMovieAsync(MovieShort movie)
        {
            await Task.Run(async () =>
            {
                var watch = Stopwatch.StartNew();

                using (var context = new ApplicationDbContext())
                {
                    await context.MovieHistory.LoadAsync();
                    var movieHistory = await context.MovieHistory.FirstOrDefaultAsync();
                    if (movieHistory == null)
                    {
                        await CreateMovieHistoryAsync();
                        movieHistory = await context.MovieHistory.FirstOrDefaultAsync();
                    }

                    if (movieHistory.MoviesShort == null)
                    {
                        movieHistory.MoviesShort = new List<Entity.Movie.MovieShort>
                        {
                            MovieShortFromModelToEntity(movie)
                        };

                        context.MovieHistory.AddOrUpdate(movieHistory);
                    }
                    else
                    {
                        var movieShort = movieHistory.MoviesShort.FirstOrDefault(p => p.MovieId == movie.Id);
                        if (movieShort == null)
                        {
                            movieHistory.MoviesShort.Add(MovieShortFromModelToEntity(movie));
                        }
                        else
                        {
                            movieShort.IsFavorite = movie.IsFavorite;
                        }
                    }

                    await context.SaveChangesAsync();
                }

                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                Logger.Debug(
                    $"SetFavoriteMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds.");
            });
        }
Esempio n. 8
0
        /// <summary>
        /// Get movie by id
        /// </summary>
        /// <param name="id">Movie's id</param>
        /// <returns>Movie searched by movie id</returns>
        public async Task<MovieShort> GetMovieById(int id)
        {
            var watch = Stopwatch.StartNew();

            var restClient = new RestClient(Constants.YtsApiEndpoint);
            var request = new RestRequest("/{segment}", Method.GET);
            request.AddUrlSegment("segment", "movie_details.json");
            request.AddParameter("movie_id", id);
            request.AddParameter("with_cast", true);
            request.AddParameter("with_images", true);

            var response = await restClient.ExecuteGetTaskAsync(request);
            if (response.ErrorException != null)
                Messenger.Default.Send(new ManageExceptionMessage(new WebException(response.ErrorException.Message)));

            var movie = new MovieShort();
            await Task.Run(() =>
            {
                var wrapper = JsonConvert.DeserializeObject<WrapperMovieFullDeserialized>(response.Content);
                if (wrapper == null)
                    return;

                var rating = Convert.ToDouble(movie.Rating, CultureInfo.InvariantCulture);
                rating /= 2.0;

                movie = new MovieShort
                {
                    ApiVersion = wrapper.Meta.ApiVersion,
                    DateUploaded = wrapper.Movie.DateUploaded,
                    DateUploadedUnix = wrapper.Movie.DateUploadedUnix,
                    ExecutionTime = wrapper.Meta.ExecutionTime,
                    Genres = wrapper.Movie.Genres,
                    Id = wrapper.Movie.Id,
                    ImdbCode = wrapper.Movie.ImdbCode,
                    IsFavorite = false,
                    HasBeenSeen = false,
                    Language = wrapper.Movie.Language,
                    MediumCoverImage = wrapper.Movie.Images.MediumCoverImage,
                    CoverImagePath = string.Empty,
                    MpaRating = wrapper.Movie.MpaRating,
                    RatingValue = rating,
                    Runtime = wrapper.Movie.Runtime,
                    ServerTime = wrapper.Meta.ServerTime,
                    ServerTimezone = wrapper.Meta.ServerTimezone,
                    SmallCoverImage = wrapper.Movie.Images.SmallCoverImage,
                    State = wrapper.Status,
                    Title = wrapper.Movie.TitleLong,
                    TitleLong = wrapper.Movie.TitleLong,
                    Torrents = wrapper.Movie.Torrents,
                    Url = wrapper.Movie.Url,
                    Year = wrapper.Movie.Year
                };
            });

            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;
            Logger.Debug(
                $"GetMovieById ({id}) in {elapsedMs} milliseconds.");

            return movie;
        }
Esempio n. 9
0
        /// <summary>
        /// Get the requested movie
        /// </summary>
        /// <param name="movie">The movie to load</param>
        private async Task LoadMovieAsync(MovieShort movie)
        {
            Logger.Info(
                $"Loading movie: {movie.Title}");

            Messenger.Default.Send(new LoadMovieMessage());
            IsMovieLoading = true;
            try
            {
                Movie = await MovieService.GetMovieFullDetailsAsync(movie);
                IsMovieLoading = false;
                await MovieService.DownloadPosterImageAsync(Movie);
                await MovieService.DownloadDirectorImageAsync(Movie);
                await MovieService.DownloadActorImageAsync(Movie);
                await MovieService.DownloadBackgroundImageAsync(Movie);
                Logger.Info(
                    $"Movie loaded: {movie.Title}");
            }
            catch (Exception ex) when (ex is SocketException || ex is WebException)
            {
                Logger.Info(
                    $"Error while loading movie {movie.Title}: {ex.Message}");
                Messenger.Default.Send(new ManageExceptionMessage(ex));
            }
        }