/// <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 = new List<Entity.Movie.Torrent>(); foreach (var torrent in movie.Torrents) { torrents.Add(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 }); } var genres = new List<Genre>(); foreach (var genre in movie.Genres) { genres.Add(new Genre { Name = genre }); } 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; }
/// <summary> /// Set the movie as favorite /// </summary> /// <param name="movie">Favorite movie</param> public 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( $"LikeMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds."); }); }