From 391fb10000bd25fa14834e2a881700ecfed95159 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 6 Oct 2023 04:13:22 +0300 Subject: [PATCH] New: Auto tag based on artist's quality profile (cherry picked from commit 6de3e7c950bd939bab96ef2ae74337108ad5a212) --- .../Components/Form/ProviderFieldFormGroup.js | 2 ++ .../Annotations/FieldDefinitionAttribute.cs | 3 +- .../QualityProfileSpecification.cs | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/NzbDrone.Core/AutoTagging/Specifications/QualityProfileSpecification.cs diff --git a/frontend/src/Components/Form/ProviderFieldFormGroup.js b/frontend/src/Components/Form/ProviderFieldFormGroup.js index 9aee59776..5ec5c9978 100644 --- a/frontend/src/Components/Form/ProviderFieldFormGroup.js +++ b/frontend/src/Components/Form/ProviderFieldFormGroup.js @@ -39,6 +39,8 @@ function getType({ type, selectOptionsProviderAction }) { return inputTypes.OAUTH; case 'rootFolder': return inputTypes.ROOT_FOLDER_SELECT; + case 'qualityProfile': + return inputTypes.QUALITY_PROFILE_SELECT; default: return inputTypes.TEXT; } diff --git a/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs b/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs index f20b02f83..f81fc359f 100644 --- a/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs +++ b/src/NzbDrone.Core/Annotations/FieldDefinitionAttribute.cs @@ -67,7 +67,8 @@ namespace NzbDrone.Core.Annotations Device, Playlist, TagSelect, - RootFolder + RootFolder, + QualityProfile } public enum HiddenType diff --git a/src/NzbDrone.Core/AutoTagging/Specifications/QualityProfileSpecification.cs b/src/NzbDrone.Core/AutoTagging/Specifications/QualityProfileSpecification.cs new file mode 100644 index 000000000..f525a555a --- /dev/null +++ b/src/NzbDrone.Core/AutoTagging/Specifications/QualityProfileSpecification.cs @@ -0,0 +1,36 @@ +using FluentValidation; +using NzbDrone.Core.Annotations; +using NzbDrone.Core.Music; +using NzbDrone.Core.Validation; + +namespace NzbDrone.Core.AutoTagging.Specifications +{ + public class QualityProfileSpecificationValidator : AbstractValidator + { + public QualityProfileSpecificationValidator() + { + RuleFor(c => c.Value).GreaterThan(0); + } + } + + public class QualityProfileSpecification : AutoTaggingSpecificationBase + { + private static readonly QualityProfileSpecificationValidator Validator = new (); + + public override int Order => 1; + public override string ImplementationName => "Quality Profile"; + + [FieldDefinition(1, Label = "Quality Profile", Type = FieldType.QualityProfile)] + public int Value { get; set; } + + protected override bool IsSatisfiedByWithoutNegate(Artist artist) + { + return Value == artist.QualityProfileId; + } + + public override NzbDroneValidationResult Validate() + { + return new NzbDroneValidationResult(Validator.Validate(this)); + } + } +}