diff --git a/src/NzbDrone.Core/Movies/AddMovieService.cs b/src/NzbDrone.Core/Movies/AddMovieService.cs index 85b4cbb26e..f479522d98 100644 --- a/src/NzbDrone.Core/Movies/AddMovieService.cs +++ b/src/NzbDrone.Core/Movies/AddMovieService.cs @@ -56,6 +56,8 @@ public Movie AddMovie(Movie newMovie) _movieMetadataService.Upsert(newMovie.MovieMetadata.Value); newMovie.MovieMetadataId = newMovie.MovieMetadata.Value.Id; + _movieService.UpdateTags(newMovie); + _movieService.AddMovie(newMovie); return newMovie; diff --git a/src/NzbDrone.Core/Movies/RefreshMovieService.cs b/src/NzbDrone.Core/Movies/RefreshMovieService.cs index cdcb81b359..4787dbe27b 100644 --- a/src/NzbDrone.Core/Movies/RefreshMovieService.cs +++ b/src/NzbDrone.Core/Movies/RefreshMovieService.cs @@ -205,8 +205,14 @@ private void RescanMovie(Movie movie, bool isNew, CommandTrigger trigger) } } - private void UpdateTags(Movie movie) + private void UpdateTags(Movie movie, bool isNew) { + if (isNew) + { + _logger.Trace("Skipping tag update for {0}. Reason: New movie", movie); + return; + } + var tagsUpdated = _movieService.UpdateTags(movie); if (tagsUpdated) @@ -230,7 +236,7 @@ public void Execute(RefreshMovieCommand message) try { movie = RefreshMovieInfo(movieId); - UpdateTags(movie); + UpdateTags(movie, isNew); RescanMovie(movie, isNew, trigger); } catch (MovieNotFoundException) @@ -240,7 +246,7 @@ public void Execute(RefreshMovieCommand message) catch (Exception e) { _logger.Error(e, "Couldn't refresh info for {0}", movie); - UpdateTags(movie); + UpdateTags(movie, isNew); RescanMovie(movie, isNew, trigger); throw; } @@ -277,13 +283,13 @@ public void Execute(RefreshMovieCommand message) _logger.Error(e, "Couldn't refresh info for {0}", movieLocal); } - UpdateTags(movie); + UpdateTags(movie, false); RescanMovie(movieLocal, false, trigger); } else { _logger.Debug("Skipping refresh of movie: {0}", movieLocal.Title); - UpdateTags(movie); + UpdateTags(movie, false); RescanMovie(movieLocal, false, trigger); } } diff --git a/src/NzbDrone.Integration.Test/ApiTests/MovieFixture.cs b/src/NzbDrone.Integration.Test/ApiTests/MovieFixture.cs index 3c44b7fc99..91900b824f 100644 --- a/src/NzbDrone.Integration.Test/ApiTests/MovieFixture.cs +++ b/src/NzbDrone.Integration.Test/ApiTests/MovieFixture.cs @@ -3,6 +3,8 @@ using System.Linq; using FluentAssertions; using NUnit.Framework; +using Radarr.Api.V3.AutoTagging; +using Radarr.Http.ClientSchema; namespace NzbDrone.Integration.Test.ApiTests { @@ -29,6 +31,53 @@ public void add_movie_with_tags_should_store_them() result.Tags.Should().Equal(tag.Id); } + [Test] + [Order(0)] + public void add_movie_should_trigger_autotag() + { + var tag = EnsureTag("autotag-test"); + var movie = Movies.Lookup("imdb:tt0110912").Single(); + movie.Genres = new List { "Thriller" }; + + var item = AutoTagging.Post(new AutoTaggingResource + { + Name = "Test", + RemoveTagsAutomatically = false, + Tags = new HashSet { tag.Id }, + Specifications = new List + { + new AutoTaggingSpecificationSchema + { + Name = "Test", + Implementation = "GenreSpecification", + ImplementationName = "Genre", + Negate = false, + Required = false, + Fields = new List + { + new Field + { + Name = "value", + Label = "Genre(s)", + Type = "tag", + Value = new List { "Thriller" } + } + } + } + } + }); + + EnsureNoMovie(680, "Pulp Fiction"); + + movie.QualityProfileId = 1; + movie.Path = Path.Combine(MovieRootFolder, movie.Title); + + var result = Movies.Post(movie); + + result.Should().NotBeNull(); + result.Tags.Should().Contain(tag.Id); + } + [Test] [Order(0)] public void add_movie_without_profileid_should_return_badrequest() diff --git a/src/NzbDrone.Integration.Test/IntegrationTestBase.cs b/src/NzbDrone.Integration.Test/IntegrationTestBase.cs index 4ba8e73918..48913fedde 100644 --- a/src/NzbDrone.Integration.Test/IntegrationTestBase.cs +++ b/src/NzbDrone.Integration.Test/IntegrationTestBase.cs @@ -17,6 +17,7 @@ using NzbDrone.Integration.Test.Client; using NzbDrone.SignalR; using NzbDrone.Test.Common.Categories; +using Radarr.Api.V3.AutoTagging; using Radarr.Api.V3.Blocklist; using Radarr.Api.V3.Config; using Radarr.Api.V3.DownloadClient; @@ -36,6 +37,7 @@ public abstract class IntegrationTestBase { protected RestClient RestClient { get; private set; } + public ClientBase AutoTagging; public ClientBase Blocklist; public CommandClient Commands; public ClientBase Tasks; @@ -99,6 +101,7 @@ protected virtual void InitRestClients() RestClient.AddDefaultHeader("Authentication", ApiKey); RestClient.AddDefaultHeader("X-Api-Key", ApiKey); + AutoTagging = new ClientBase(RestClient, ApiKey); Blocklist = new ClientBase(RestClient, ApiKey); Commands = new CommandClient(RestClient, ApiKey); Tasks = new ClientBase(RestClient, ApiKey, "system/task");