public Movie AddMovie(Movie newMovie) { Ensure.That(newMovie, () => newMovie).IsNotNull(); MoviePathState defaultState = MoviePathState.Static; if (!_configService.PathsDefaultStatic) { defaultState = MoviePathState.Dynamic; } if (string.IsNullOrWhiteSpace(newMovie.Path)) { var folderName = _fileNameBuilder.GetMovieFolder(newMovie); newMovie.Path = Path.Combine(newMovie.RootFolderPath, folderName); newMovie.PathState = defaultState; } else { newMovie.PathState = defaultState == MoviePathState.Dynamic ? MoviePathState.StaticOnce : MoviePathState.Static; } _logger.Info("Adding Movie {0} Path: [{1}]", newMovie, newMovie.Path); newMovie.CleanTitle = newMovie.Title.CleanSeriesTitle(); newMovie.SortTitle = MovieTitleNormalizer.Normalize(newMovie.Title, newMovie.TmdbId); newMovie.Added = DateTime.UtcNow; _movieRepository.Insert(newMovie); _eventAggregator.PublishEvent(new MovieAddedEvent(GetMovie(newMovie.Id))); return(newMovie); }
// Add Movie: // Called whenever a movie is added from the GUI (and i assume via RSS feeds also) // Reason for patch: // Movie.Path must be root directory, not a sub folder. public static bool AddMovie(ref Movie newMovie, ref NzbDrone.Core.Movies.MovieService __instance, ref Logger ____logger, ref IConfigService ____configService, ref IMovieRepository ____movieRepository, ref IBuildFileNames ____fileNameBuilder, ref IEventAggregator ____eventAggregator, ref Movie __result) { var movie = newMovie; Ensure.That(newMovie, () => movie).IsNotNull(); Utility.WriteToConsole("Patched AddMovie called!", ConsoleColor.Green); Utility.WriteToConsole($"New movie {movie.Title} added, patching file path to not have sub folders...", ConsoleColor.Green); MoviePathState defaultState = MoviePathState.Static; if (!____configService.PathsDefaultStatic) { defaultState = MoviePathState.Dynamic; } if (string.IsNullOrWhiteSpace(movie.Path)) { // Call the original GetMovieFolder as it does other stuff too. var folderName = ____fileNameBuilder.GetMovieFolder(movie); // But replace our movie path with the root folder path, nothing more. movie.Path = newMovie.RootFolderPath; movie.PathState = defaultState; } else { movie.PathState = defaultState == MoviePathState.Dynamic ? MoviePathState.StaticOnce : MoviePathState.Static; } ____logger.Info("Adding Movie {0} Path: [{1}]", newMovie, newMovie.Path); movie.CleanTitle = newMovie.Title.CleanSeriesTitle(); movie.SortTitle = MovieTitleNormalizer.Normalize(movie.Title, movie.TmdbId); movie.Added = DateTime.UtcNow; ____movieRepository.Insert(newMovie); ____eventAggregator.PublishEvent(new MovieAddedEvent(__instance.GetMovie(movie.Id))); __result = movie; Utility.WriteToConsole($"Patching complete, new root directory of movie {movie.Title} is {movie.Path}", ConsoleColor.Green); Utility.WriteToConsole("Patching complete.", ConsoleColor.Green); return(false); }
public List <Movie> AddMovies(List <Movie> newMovies) { newMovies.ForEach(m => Ensure.That(m, () => m).IsNotNull()); newMovies.ForEach(m => { MoviePathState defaultState = MoviePathState.Static; if (!_configService.PathsDefaultStatic) { defaultState = MoviePathState.Dynamic; } if (string.IsNullOrWhiteSpace(m.Path)) { var folderName = _fileNameBuilder.GetMovieFolder(m); m.Path = Path.Combine(m.RootFolderPath, folderName); m.PathState = defaultState; } else { m.PathState = defaultState == MoviePathState.Dynamic ? MoviePathState.StaticOnce : MoviePathState.Static; } m.CleanTitle = m.Title.CleanSeriesTitle(); m.SortTitle = MovieTitleNormalizer.Normalize(m.Title, m.TmdbId); m.Added = DateTime.UtcNow; }); var existingMovies = GetAllMovies(); var potentialMovieCount = newMovies.Count; newMovies = newMovies.DistinctBy(movie => movie.TmdbId).ToList(); // Ensure we don't add the same movie twice newMovies = newMovies.ExceptBy(n => n.TmdbId, existingMovies, e => e.TmdbId, EqualityComparer <int> .Default).ToList(); // Ensure we don't add a movie that already exists _movieRepository.InsertMany(newMovies); _logger.Debug("Adding {0} movies, {1} duplicates detected and skipped", newMovies.Count, potentialMovieCount - newMovies.Count); newMovies.ForEach(m => { _eventAggregator.PublishEvent(new MovieAddedEvent(m)); }); return(newMovies); }