From d835c168d3315e297ad61f4bc85320bb4f375817 Mon Sep 17 00:00:00 2001 From: Leonardo Galli Date: Tue, 3 Jan 2017 13:26:09 +0100 Subject: [PATCH] Searching for movies directly when adding them is now working. --- src/NzbDrone.Api/Series/MovieResource.cs | 4 ++ .../Datastore/Migration/001_initial_setup.cs | 3 +- src/NzbDrone.Core/NzbDrone.Core.csproj | 1 + src/NzbDrone.Core/Tv/Movie.cs | 7 ++- src/NzbDrone.Core/Tv/MovieScannedHandler.cs | 57 +++++++++++++++++++ src/NzbDrone.Core/Tv/MovieService.cs | 5 ++ src/UI/AddMovies/SearchResultView.js | 9 +-- 7 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 src/NzbDrone.Core/Tv/MovieScannedHandler.cs diff --git a/src/NzbDrone.Api/Series/MovieResource.cs b/src/NzbDrone.Api/Series/MovieResource.cs index eed694e05..a35b2d210 100644 --- a/src/NzbDrone.Api/Series/MovieResource.cs +++ b/src/NzbDrone.Api/Series/MovieResource.cs @@ -48,6 +48,7 @@ namespace NzbDrone.Api.Movie public List Genres { get; set; } public HashSet Tags { get; set; } public DateTime Added { get; set; } + public AddMovieOptions AddOptions { get; set; } public Ratings Ratings { get; set; } //TODO: Add series statistics as a property of the series (instead of individual properties) @@ -110,6 +111,7 @@ namespace NzbDrone.Api.Movie Genres = model.Genres, Tags = model.Tags, Added = model.Added, + AddOptions = model.AddOptions, Ratings = model.Ratings }; } @@ -152,6 +154,7 @@ namespace NzbDrone.Api.Movie Genres = resource.Genres, Tags = resource.Tags, Added = resource.Added, + AddOptions = resource.AddOptions, Ratings = resource.Ratings }; } @@ -167,6 +170,7 @@ namespace NzbDrone.Api.Movie movie.RootFolderPath = resource.RootFolderPath; movie.Tags = resource.Tags; + movie.AddOptions = resource.AddOptions; return movie; } diff --git a/src/NzbDrone.Core/Datastore/Migration/001_initial_setup.cs b/src/NzbDrone.Core/Datastore/Migration/001_initial_setup.cs index 2fc722cb4..0042de064 100644 --- a/src/NzbDrone.Core/Datastore/Migration/001_initial_setup.cs +++ b/src/NzbDrone.Core/Datastore/Migration/001_initial_setup.cs @@ -63,7 +63,8 @@ namespace NzbDrone.Core.Datastore.Migration .WithColumn("Ratings").AsString().Nullable() .WithColumn("Genres").AsString().Nullable() .WithColumn("Tags").AsString().Nullable() - .WithColumn("Certification").AsString().Nullable(); + .WithColumn("Certification").AsString().Nullable() + .WithColumn("AddOptions").AsString().Nullable(); Create.TableForModel("Seasons") diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 9dd64feb2..18f0b1ae7 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -1096,6 +1096,7 @@ + diff --git a/src/NzbDrone.Core/Tv/Movie.cs b/src/NzbDrone.Core/Tv/Movie.cs index ccbe93510..9409ae23e 100644 --- a/src/NzbDrone.Core/Tv/Movie.cs +++ b/src/NzbDrone.Core/Tv/Movie.cs @@ -40,11 +40,16 @@ namespace NzbDrone.Core.Tv public DateTime? InCinemas { get; set; } public LazyLoaded Profile { get; set; } public HashSet Tags { get; set; } -// public AddMovieOptions AddOptions { get; set; } + public AddMovieOptions AddOptions { get; set; } public override string ToString() { return string.Format("[{0}][{1}]", ImdbId, Title.NullSafe()); } } + + public class AddMovieOptions : MonitoringOptions + { + public bool SearchForMovie { get; set; } + } } \ No newline at end of file diff --git a/src/NzbDrone.Core/Tv/MovieScannedHandler.cs b/src/NzbDrone.Core/Tv/MovieScannedHandler.cs new file mode 100644 index 000000000..151ef0559 --- /dev/null +++ b/src/NzbDrone.Core/Tv/MovieScannedHandler.cs @@ -0,0 +1,57 @@ +using NLog; +using NzbDrone.Core.IndexerSearch; +using NzbDrone.Core.MediaFiles.Events; +using NzbDrone.Core.Messaging.Commands; +using NzbDrone.Core.Messaging.Events; + +namespace NzbDrone.Core.Tv +{ + public class MovieScannedHandler : IHandle, + IHandle + { + + private readonly IMovieService _movieService; + private readonly IManageCommandQueue _commandQueueManager; + + private readonly Logger _logger; + + public MovieScannedHandler( IMovieService movieService, + IManageCommandQueue commandQueueManager, + Logger logger) + { + _movieService = movieService; + _commandQueueManager = commandQueueManager; + _logger = logger; + } + + private void HandleScanEvents(Movie movie) + { + if (movie.AddOptions == null) + { + //_episodeAddedService.SearchForRecentlyAdded(movie.Id); + return; + } + + _logger.Info("[{0}] was recently added, performing post-add actions", movie.Title); + //_episodeMonitoredService.SetEpisodeMonitoredStatus(movie, movie.AddOptions); + + if (movie.AddOptions.SearchForMovie) + { + _commandQueueManager.Push(new MoviesSearchCommand { MovieId = movie.Id}); + } + + movie.AddOptions = null; + _movieService.RemoveAddOptions(movie); + } + + public void Handle(MovieScannedEvent message) + { + HandleScanEvents(message.Movie); + } + + public void Handle(MovieScanSkippedEvent message) + { + HandleScanEvents(message.Movie); + } + } +} diff --git a/src/NzbDrone.Core/Tv/MovieService.cs b/src/NzbDrone.Core/Tv/MovieService.cs index 546442f48..d3ec007cb 100644 --- a/src/NzbDrone.Core/Tv/MovieService.cs +++ b/src/NzbDrone.Core/Tv/MovieService.cs @@ -27,6 +27,7 @@ namespace NzbDrone.Core.Tv Movie UpdateMovie(Movie movie); List UpdateMovie(List movie); bool MoviePathExists(string folder); + void RemoveAddOptions(Movie movie); } public class MovieService : IMovieService @@ -190,5 +191,9 @@ namespace NzbDrone.Core.Tv return _movieRepository.MoviePathExists(folder); } + public void RemoveAddOptions(Movie movie) + { + _movieRepository.SetFields(movie, s => s.AddOptions); + } } } diff --git a/src/UI/AddMovies/SearchResultView.js b/src/UI/AddMovies/SearchResultView.js index 839b2d1ee..a01a41e3e 100644 --- a/src/UI/AddMovies/SearchResultView.js +++ b/src/UI/AddMovies/SearchResultView.js @@ -153,14 +153,14 @@ var view = Marionette.ItemView.extend({ }, _addWithoutSearch : function() { - this._addMovies(true); + this._addMovies(false); }, _addAndSearch : function() { this._addMovies(true); }, - _addMovies : function(searchForMissingEpisodes) { + _addMovies : function(searchForMovie) { var addButton = this.ui.addButton; var addSearchButton = this.ui.addSearchButton; @@ -171,7 +171,8 @@ var view = Marionette.ItemView.extend({ var rootFolderPath = this.ui.rootFolder.children(':selected').text(); var options = this._getAddMoviesOptions(); - options.searchForMissingEpisodes = searchForMissingEpisodes; + options.searchForMovie = searchForMovie; + console.warn(searchForMovie); this.model.set({ profileId : profile, @@ -186,7 +187,7 @@ var view = Marionette.ItemView.extend({ console.log(this.model.save); console.log(promise); - if (searchForMissingEpisodes) { + if (searchForMovie) { this.ui.addSearchButton.spinForPromise(promise); }