From c10aadcc7bc38604014bdd4fc96fea1c4081246b Mon Sep 17 00:00:00 2001 From: Jamie Bartlett Date: Thu, 3 Apr 2025 16:59:29 +0100 Subject: [PATCH] New: Auto tag movies based on studio --- .../Specifications/StudioSpecification.cs | 39 +++++++++++++++++++ src/NzbDrone.Core/Localization/Core/en.json | 1 + 2 files changed, 40 insertions(+) create mode 100644 src/NzbDrone.Core/AutoTagging/Specifications/StudioSpecification.cs diff --git a/src/NzbDrone.Core/AutoTagging/Specifications/StudioSpecification.cs b/src/NzbDrone.Core/AutoTagging/Specifications/StudioSpecification.cs new file mode 100644 index 0000000000..066e0c3e2d --- /dev/null +++ b/src/NzbDrone.Core/AutoTagging/Specifications/StudioSpecification.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using System.Linq; +using FluentValidation; +using NzbDrone.Common.Extensions; +using NzbDrone.Core.Annotations; +using NzbDrone.Core.Movies; +using NzbDrone.Core.Validation; + +namespace NzbDrone.Core.AutoTagging.Specifications +{ + public class StudioSpecificationValidator : AbstractValidator + { + public StudioSpecificationValidator() + { + RuleFor(c => c.Value).NotEmpty(); + } + } + + public class StudioSpecification : AutoTaggingSpecificationBase + { + private static readonly StudioSpecificationValidator Validator = new (); + + public override int Order => 1; + public override string ImplementationName => "Studio"; + + [FieldDefinition(1, Label = "AutoTaggingSpecificationStudio", Type = FieldType.Tag)] + public IEnumerable Value { get; set; } + + protected override bool IsSatisfiedByWithoutNegate(Movie movie) + { + return Value.Any(studio => movie.MovieMetadata?.Value?.Studio?.EqualsIgnoreCase(studio) ?? false); + } + + public override NzbDroneValidationResult Validate() + { + return new NzbDroneValidationResult(Validator.Validate(this)); + } + } +} diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index ec48ffbdc1..1f10f5c8c1 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -126,6 +126,7 @@ "AutoTaggingSpecificationQualityProfile": "Quality Profile", "AutoTaggingSpecificationRootFolder": "Root Folder", "AutoTaggingSpecificationStatus": "Status", + "AutoTaggingSpecificationStudio": "Studio(s)", "AutoTaggingSpecificationTag": "Tag", "AutoUnmonitorPreviouslyDownloadedMoviesHelpText": "Movies deleted from the disk are automatically unmonitored in {appName}", "Automatic": "Automatic",