From 38e7e37d57f7affff8576ac3efcf340e0d2b7986 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 7 May 2024 17:45:28 -0700 Subject: [PATCH] Refactor movie tags for CustomScript, Webhook and Notifiarr events (cherry picked from commit cc0a284660f139d5f47b27a2c389973e5e888587) Closes #10003 --- .../CustomScript/CustomScript.cs | 23 +++++++--- .../Notifications/Webhook/WebhookBase.cs | 46 ++++++------------- .../Notifications/Webhook/WebhookMovie.cs | 9 ++-- 3 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs index 72392cff1..9c96d5bd0 100755 --- a/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs +++ b/src/NzbDrone.Core/Notifications/CustomScript/CustomScript.cs @@ -69,7 +69,7 @@ public override void OnGrab(GrabMessage message) environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Find(t)?.Label).Where(l => l.IsNotNullOrWhiteSpace()))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); environmentVariables.Add("Radarr_Movie_In_Cinemas_Date", movie.MovieMetadata.Value.InCinemas.ToString() ?? string.Empty); @@ -107,7 +107,7 @@ public override void OnDownload(DownloadMessage message) environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -164,7 +164,7 @@ public override void OnMovieRename(Movie movie, List renamedFi environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -191,7 +191,7 @@ public override void OnMovieAdded(Movie movie) environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -216,7 +216,7 @@ public override void OnMovieFileDelete(MovieFileDeleteMessage deleteMessage) environmentVariables.Add("Radarr_Movie_Year", movie.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -246,7 +246,7 @@ public override void OnMovieDelete(MovieDeleteMessage deleteMessage) environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -318,7 +318,7 @@ public override void OnManualInteractionRequired(ManualInteractionRequiredMessag environmentVariables.Add("Radarr_Movie_Year", movie.MovieMetadata.Value.Year.ToString()); environmentVariables.Add("Radarr_Movie_OriginalLanguage", IsoLanguages.Get(movie.MovieMetadata.Value.OriginalLanguage).ThreeLetterCode); environmentVariables.Add("Radarr_Movie_Genres", string.Join("|", movie.MovieMetadata.Value.Genres)); - environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", movie.Tags.Select(t => _tagRepository.Get(t).Label))); + environmentVariables.Add("Radarr_Movie_Tags", string.Join("|", GetTagLabels(movie))); environmentVariables.Add("Radarr_Movie_Path", movie.Path); environmentVariables.Add("Radarr_Movie_ImdbId", movie.MovieMetadata.Value.ImdbId ?? string.Empty); environmentVariables.Add("Radarr_Movie_TmdbId", movie.MovieMetadata.Value.TmdbId.ToString()); @@ -385,5 +385,14 @@ private bool ValidatePathParent(string possibleParent, string path) { return possibleParent.IsParentPath(path); } + + private List GetTagLabels(Movie movie) + { + return _tagRepository.GetTags(movie.Tags) + .Select(t => t.Label) + .Where(l => l.IsNotNullOrWhiteSpace()) + .OrderBy(l => l) + .ToList(); + } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs index fa0e8f9ad..995addf97 100644 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookBase.cs @@ -37,10 +37,7 @@ protected WebhookGrabPayload BuildOnGrabPayload(GrabMessage message) EventType = WebhookEventType.Grab, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(message.Movie) - { - Tags = GetTagLabels(message.Movie) - }, + Movie = new WebhookMovie(message.Movie, GetTagLabels(message.Movie)), RemoteMovie = new WebhookRemoteMovie(remoteMovie), Release = new WebhookRelease(quality, remoteMovie), DownloadClient = message.DownloadClientName, @@ -59,10 +56,7 @@ protected WebhookImportPayload BuildOnDownloadPayload(DownloadMessage message) EventType = WebhookEventType.Download, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(message.Movie) - { - Tags = GetTagLabels(message.Movie) - }, + Movie = new WebhookMovie(message.Movie, GetTagLabels(message.Movie)), RemoteMovie = new WebhookRemoteMovie(message.Movie), MovieFile = new WebhookMovieFile(movieFile), Release = new WebhookGrabbedRelease(message.Release), @@ -93,10 +87,7 @@ protected WebhookAddedPayload BuildOnMovieAdded(Movie movie) EventType = WebhookEventType.MovieAdded, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(movie) - { - Tags = GetTagLabels(movie) - }, + Movie = new WebhookMovie(movie, GetTagLabels(movie)), AddMethod = movie.AddOptions.AddMethod }; } @@ -108,10 +99,7 @@ protected WebhookMovieFileDeletePayload BuildOnMovieFileDelete(MovieFileDeleteMe EventType = WebhookEventType.MovieFileDelete, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(deleteMessage.Movie) - { - Tags = GetTagLabels(deleteMessage.Movie) - }, + Movie = new WebhookMovie(deleteMessage.Movie, GetTagLabels(deleteMessage.Movie)), MovieFile = new WebhookMovieFile(deleteMessage.MovieFile), DeleteReason = deleteMessage.Reason }; @@ -124,10 +112,7 @@ protected WebhookMovieDeletePayload BuildOnMovieDelete(MovieDeleteMessage delete EventType = WebhookEventType.MovieDelete, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(deleteMessage.Movie) - { - Tags = GetTagLabels(deleteMessage.Movie) - }, + Movie = new WebhookMovie(deleteMessage.Movie, GetTagLabels(deleteMessage.Movie)), DeletedFiles = deleteMessage.DeletedFiles }; @@ -146,10 +131,7 @@ protected WebhookRenamePayload BuildOnRenamePayload(Movie movie, List new WebhookRenamedMovieFile(x)) }; } @@ -204,10 +186,7 @@ protected WebhookManualInteractionPayload BuildManualInteractionRequiredPayload( EventType = WebhookEventType.ManualInteractionRequired, InstanceName = _configFileProvider.InstanceName, ApplicationUrl = _configService.ApplicationUrl, - Movie = new WebhookMovie(message.Movie) - { - Tags = GetTagLabels(message.Movie) - }, + Movie = new WebhookMovie(message.Movie, GetTagLabels(message.Movie)), DownloadInfo = new WebhookDownloadClientItem(quality, message.TrackedDownload.DownloadItem), DownloadClient = message.DownloadClientInfo?.Name, DownloadClientType = message.DownloadClientInfo?.Type, @@ -233,7 +212,7 @@ protected WebhookPayload BuildTestPayload() Year = 1970, FolderPath = "C:\\testpath", ReleaseDate = "1970-01-01", - Tags = new[] { "test-tag" } + Tags = new List { "test-tag" } }, RemoteMovie = new WebhookRemoteMovie { @@ -254,12 +233,13 @@ protected WebhookPayload BuildTestPayload() }; } - private IEnumerable GetTagLabels(Movie movie) + private List GetTagLabels(Movie movie) { - return movie.Tags? - .Select(t => _tagRepository.Find(t)?.Label) + return _tagRepository.GetTags(movie.Tags) + .Select(t => t.Label) .Where(l => l.IsNotNullOrWhiteSpace()) - .OrderBy(l => l); + .OrderBy(l => l) + .ToList(); } } } diff --git a/src/NzbDrone.Core/Notifications/Webhook/WebhookMovie.cs b/src/NzbDrone.Core/Notifications/Webhook/WebhookMovie.cs index 3fd8bb5ed..df651e8e2 100755 --- a/src/NzbDrone.Core/Notifications/Webhook/WebhookMovie.cs +++ b/src/NzbDrone.Core/Notifications/Webhook/WebhookMovie.cs @@ -16,13 +16,13 @@ public class WebhookMovie public int TmdbId { get; set; } public string ImdbId { get; set; } public string Overview { get; set; } - public IEnumerable Tags { get; set; } + public List Tags { get; set; } public WebhookMovie() { } - public WebhookMovie(Movie movie) + public WebhookMovie(Movie movie, List tags) { Id = movie.Id; Title = movie.Title; @@ -32,10 +32,11 @@ public WebhookMovie(Movie movie) TmdbId = movie.TmdbId; ImdbId = movie.ImdbId; Overview = movie.MovieMetadata.Value.Overview; + Tags = tags; } - public WebhookMovie(Movie movie, MovieFile movieFile) - : this(movie) + public WebhookMovie(Movie movie, MovieFile movieFile, List tags) + : this(movie, tags) { FilePath = Path.Combine(movie.Path, movieFile.RelativePath); }