From 5be58249f8be0df43367fa29c95768e5132ec393 Mon Sep 17 00:00:00 2001 From: Jamie Bartlett Date: Tue, 29 Apr 2025 02:08:57 +0200 Subject: [PATCH] New: Auto tag based on network Closes #7793 --- .../Specifications/NetworkSpecification.cs | 39 +++++++++++++++++++ src/NzbDrone.Core/Localization/Core/en.json | 1 + 2 files changed, 40 insertions(+) create mode 100644 src/NzbDrone.Core/AutoTagging/Specifications/NetworkSpecification.cs diff --git a/src/NzbDrone.Core/AutoTagging/Specifications/NetworkSpecification.cs b/src/NzbDrone.Core/AutoTagging/Specifications/NetworkSpecification.cs new file mode 100644 index 000000000..cd623a57a --- /dev/null +++ b/src/NzbDrone.Core/AutoTagging/Specifications/NetworkSpecification.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.Tv; +using NzbDrone.Core.Validation; + +namespace NzbDrone.Core.AutoTagging.Specifications +{ + public class NetworkSpecificationValidator : AbstractValidator + { + public NetworkSpecificationValidator() + { + RuleFor(c => c.Value).NotEmpty(); + } + } + + public class NetworkSpecification : AutoTaggingSpecificationBase + { + private static readonly NetworkSpecificationValidator Validator = new(); + + public override int Order => 1; + public override string ImplementationName => "Network"; + + [FieldDefinition(1, Label = "AutoTaggingSpecificationNetwork", Type = FieldType.Tag)] + public IEnumerable Value { get; set; } + + protected override bool IsSatisfiedByWithoutNegate(Series series) + { + return Value.Any(network => series.Network.EqualsIgnoreCase(network)); + } + + 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 2bb035da4..db4d7bc12 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -131,6 +131,7 @@ "AutoTaggingSpecificationGenre": "Genre(s)", "AutoTaggingSpecificationMaximumYear": "Maximum Year", "AutoTaggingSpecificationMinimumYear": "Minimum Year", + "AutoTaggingSpecificationNetwork": "Network(s)", "AutoTaggingSpecificationOriginalLanguage": "Language", "AutoTaggingSpecificationQualityProfile": "Quality Profile", "AutoTaggingSpecificationRootFolder": "Root Folder",