/// <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.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 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 }).ToList(); var directors = movie.Directors.Select(actor => new Director { MediumImage = actor.MediumImage, Name = actor.Name, SmallImage = actor.SmallImage, SmallImagePath = actor.SmallImagePath }).ToList(); 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, Genres = genres, DateUploadedUnix = movie.DateUploadedUnix, MpaRating = movie.MpaRating, Rating = movie.RatingValue, Images = images, DescriptionFull = movie.DescriptionFull, Actors = actors, Directors = directors, 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) { 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.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(); } watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Debug( $"SetHasBeenSeenMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds."); }); }