/// <summary> /// Set the movie as favorite /// </summary> /// <param name="movie">Favorite movie</param> public async Task SetFavoriteMovieAsync(MovieShort 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.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(); } } catch (Exception exception) { Logger.Error( $"SetFavoriteMovieAsync: {exception.Message}"); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Debug( $"SetFavoriteMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds."); } }
/// <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) { if (movie == null) { throw new ArgumentNullException(nameof(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 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.ToList(), MediumCoverImage = movie.MediumCoverImage, Genres = genres.ToList(), DateUploadedUnix = movie.DateUploadedUnix, CoverImagePath = movie.CoverImagePath, MpaRating = movie.MpaRating, Rating = movie.RatingValue, ExecutionTime = movie.ExecutionTime, ApiVersion = movie.ApiVersion }; return(movieShort); }
/// <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.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 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.ToList(), MediumCoverImage = movie.MediumCoverImage, Genres = genres.ToList(), 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) { 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.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(); } } catch (Exception exception) { Logger.Error( $"SetFavoriteMovieAsync: {exception.Message}"); } finally { watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Logger.Debug( $"SetFavoriteMovieAsync ({movie.ImdbCode}) in {elapsedMs} milliseconds."); } }