Example #1
0
        /// <summary>
        /// Set a movie as seen
        /// </summary>
        /// <param name="movie">Seen movie</param>
        public async Task SetHasBeenSeenMovieAsync(MovieFull movie)
        {
            if (movie == null)
            {
                throw new ArgumentNullException(nameof(movie));
            }
            var watch = Stopwatch.StartNew();

            try
            {
                using (var context = new ApplicationDbContext())
                {
                    var movieHistory = await context.MovieHistory.FirstOrDefaultAsync();

                    if (movieHistory == null)
                    {
                        await CreateMovieHistoryAsync();

                        movieHistory = await context.MovieHistory.FirstOrDefaultAsync();
                    }

                    if (movieHistory.MoviesFull == null)
                    {
                        movieHistory.MoviesFull = new List <Entity.Movie.MovieFull>
                        {
                            MovieFullFromModelToEntity(movie)
                        };

                        context.MovieHistory.AddOrUpdate(movieHistory);
                    }
                    else
                    {
                        var movieFull = movieHistory.MoviesFull.FirstOrDefault(p => p.MovieId == movie.Id);
                        if (movieFull == null)
                        {
                            movieHistory.MoviesFull.Add(MovieFullFromModelToEntity(movie));
                        }
                        else
                        {
                            movieFull.HasBeenSeen = movie.HasBeenSeen;
                        }
                    }

                    await context.SaveChangesAsync();
                }
            }
            catch (Exception exception)
            {
                Logger.Error(
                    $"SetHasBeenSeenMovieAsync: {exception.Message}");
            }
            finally
            {
                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                Logger.Debug(
                    $"SetHasBeenSeenMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds.");
            }
        }
        /// <summary>
        /// Convert a full movie model to a full movie entity
        /// </summary>
        /// <param name="movie">The movie to convert</param>
        /// <returns>Full movie entity</returns>
        private static Entity.Movie.MovieFull MovieFullFromModelToEntity(MovieFull movie)
        {
            var torrents = movie.Torrents.Select(torrent => new Entity.Movie.Torrent
            {
                DateUploaded    = torrent.DateUploaded,
                Url             = torrent.Url,
                Quality         = torrent.Quality,
                DateUploadedMix = torrent.DateUploadedUnix,
                Framerate       = torrent.Framerate,
                Hash            = torrent.Hash,
                Peers           = torrent.Peers,
                Resolution      = torrent.Resolution,
                Seeds           = torrent.Seeds,
                Size            = torrent.Size,
                SizeBytes       = torrent.SizeBytes
            });

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

            var images = new Images
            {
                BackgroundImage        = movie.Images.BackgroundImage,
                MediumCoverImage       = movie.Images.MediumCoverImage,
                SmallCoverImage        = movie.Images.SmallCoverImage,
                LargeCoverImage        = movie.Images.LargeCoverImage,
                LargeScreenshotImage1  = movie.Images.LargeScreenshotImage1,
                LargeScreenshotImage2  = movie.Images.LargeScreenshotImage2,
                LargeScreenshotImage3  = movie.Images.MediumScreenshotImage3,
                MediumScreenshotImage3 = movie.Images.MediumScreenshotImage3,
                MediumScreenshotImage1 = movie.Images.MediumScreenshotImage1,
                MediumScreenshotImage2 = movie.Images.MediumScreenshotImage2
            };

            var actors = movie.Actors.Select(actor => new Actor
            {
                CharacterName  = actor.CharacterName,
                MediumImage    = actor.MediumImage,
                Name           = actor.Name,
                SmallImage     = actor.SmallImage,
                SmallImagePath = actor.SmallImagePath
            });

            var directors = movie.Directors.Select(actor => new Director
            {
                MediumImage    = actor.MediumImage,
                Name           = actor.Name,
                SmallImage     = actor.SmallImage,
                SmallImagePath = actor.SmallImagePath
            });

            var movieFull = new Entity.Movie.MovieFull
            {
                MovieId          = movie.Id,
                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.ToList(),
                Genres           = genres.ToList(),
                DateUploadedUnix = movie.DateUploadedUnix,
                MpaRating        = movie.MpaRating,
                Rating           = movie.RatingValue,
                Images           = images,
                DescriptionFull  = movie.DescriptionFull,
                Actors           = actors.ToList(),
                Directors        = directors.ToList(),
                DescriptionIntro = movie.DescriptionIntro,
                DownloadCount    = movie.DownloadCount,
                LikeCount        = movie.LikeCount,
                RtAudienceRating = movie.RtAudienceRating,
                RtAudienceScore  = movie.RtAudienceScore,
                RtCriticsRating  = movie.RtCriticsRating,
                RtCrtiticsScore  = movie.RtCrtiticsScore,
                YtTrailerCode    = movie.YtTrailerCode,
                HasBeenSeen      = movie.HasBeenSeen,
                IsFavorite       = movie.IsFavorite
            };

            return(movieFull);
        }
        /// <summary>
        /// Convert a full movie model to a full movie entity
        /// </summary>
        /// <param name="movie">The movie to convert</param>
        /// <returns>Full movie entity</returns>
        private static Entity.Movie.MovieFull MovieFullFromModelToEntity(MovieFull movie)
        {
            var torrents = movie.Torrents.Select(torrent => new Entity.Movie.Torrent
            {
                DateUploaded = torrent.DateUploaded,
                Url = torrent.Url,
                Quality = torrent.Quality,
                DateUploadedMix = torrent.DateUploadedUnix,
                Framerate = torrent.Framerate,
                Hash = torrent.Hash,
                Peers = torrent.Peers,
                Resolution = torrent.Resolution,
                Seeds = torrent.Seeds,
                Size = torrent.Size,
                SizeBytes = torrent.SizeBytes
            });

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

            var images = new Images
            {
                BackgroundImage = movie.Images.BackgroundImage,
                MediumCoverImage = movie.Images.MediumCoverImage,
                SmallCoverImage = movie.Images.SmallCoverImage,
                LargeCoverImage = movie.Images.LargeCoverImage,
                LargeScreenshotImage1 = movie.Images.LargeScreenshotImage1,
                LargeScreenshotImage2 = movie.Images.LargeScreenshotImage2,
                LargeScreenshotImage3 = movie.Images.MediumScreenshotImage3,
                MediumScreenshotImage3 = movie.Images.MediumScreenshotImage3,
                MediumScreenshotImage1 = movie.Images.MediumScreenshotImage1,
                MediumScreenshotImage2 = movie.Images.MediumScreenshotImage2
            };

            var actors = movie.Actors.Select(actor => new Actor
            {
                CharacterName = actor.CharacterName,
                MediumImage = actor.MediumImage,
                Name = actor.Name,
                SmallImage = actor.SmallImage,
                SmallImagePath = actor.SmallImagePath
            });

            var directors = movie.Directors.Select(actor => new Director
            {
                MediumImage = actor.MediumImage,
                Name = actor.Name,
                SmallImage = actor.SmallImage,
                SmallImagePath = actor.SmallImagePath
            });

            var movieFull = new Entity.Movie.MovieFull
            {
                MovieId = movie.Id,
                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.ToList(),
                Genres = genres.ToList(),
                DateUploadedUnix = movie.DateUploadedUnix,
                MpaRating = movie.MpaRating,
                Rating = movie.RatingValue,
                Images = images,
                DescriptionFull = movie.DescriptionFull,
                Actors = actors.ToList(),
                Directors = directors.ToList(),
                DescriptionIntro = movie.DescriptionIntro,
                DownloadCount = movie.DownloadCount,
                LikeCount = movie.LikeCount,
                RtAudienceRating = movie.RtAudienceRating,
                RtAudienceScore = movie.RtAudienceScore,
                RtCriticsRating = movie.RtCriticsRating,
                RtCrtiticsScore = movie.RtCrtiticsScore,
                YtTrailerCode = movie.YtTrailerCode,
                HasBeenSeen = movie.HasBeenSeen,
                IsFavorite = movie.IsFavorite
            };

            return movieFull;
        }
        /// <summary>
        /// Set a movie as seen
        /// </summary>
        /// <param name="movie">Seen movie</param>
        public async Task SetHasBeenSeenMovieAsync(MovieFull movie)
        {
            var watch = Stopwatch.StartNew();

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

                    if (movieHistory.MoviesFull == null)
                    {
                        movieHistory.MoviesFull = new List<Entity.Movie.MovieFull>
                        {
                            MovieFullFromModelToEntity(movie)
                        };

                        context.MovieHistory.AddOrUpdate(movieHistory);
                    }
                    else
                    {
                        var movieFull = movieHistory.MoviesFull.FirstOrDefault(p => p.MovieId == movie.Id);
                        if (movieFull == null)
                        {
                            movieHistory.MoviesFull.Add(MovieFullFromModelToEntity(movie));
                        }
                        else
                        {
                            movieFull.HasBeenSeen = movie.HasBeenSeen;
                        }
                    }

                    await context.SaveChangesAsync();
                }
            }
            catch (Exception exception)
            {
                Logger.Error(
                    $"SetHasBeenSeenMovieAsync: {exception.Message}");
            }
            finally
            {
                watch.Stop();
                var elapsedMs = watch.ElapsedMilliseconds;
                Logger.Debug(
                    $"SetHasBeenSeenMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds.");
            }
        }