From 4de20b09a8e17f457377e2351e7ebbce92770617 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 31 May 2015 00:35:25 -0700 Subject: [PATCH] Better validation messaging for Newznab Categories --- .../Indexers/Newznab/NewznabSettings.cs | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs b/src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs index f45baeb01..534ed366f 100644 --- a/src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs +++ b/src/NzbDrone.Core/Indexers/Newznab/NewznabSettings.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text.RegularExpressions; using FluentValidation; +using FluentValidation.Results; using NzbDrone.Common.Extensions; using NzbDrone.Core.Annotations; using NzbDrone.Core.ThingiProvider; @@ -37,13 +38,20 @@ private static bool ShouldHaveApiKey(NewznabSettings settings) public NewznabSettingsValidator() { + Custom(newznab => + { + if (newznab.Categories.Empty() && newznab.AnimeCategories.Empty()) + { + return new ValidationFailure("", "Either 'Categories' or 'Anime Categories' must be provided"); + } + + return null; + }); + RuleFor(c => c.Url).ValidRootUrl(); RuleFor(c => c.ApiKey).NotEmpty().When(ShouldHaveApiKey); - RuleFor(c => c.Categories).NotEmpty().When(c => !c.AnimeCategories.Any()); - RuleFor(c => c.AnimeCategories).NotEmpty().When(c => !c.Categories.Any()); - RuleFor(c => c.AdditionalParameters) - .Matches(AdditionalParametersRegex) - .When(c => !c.AdditionalParameters.IsNullOrWhiteSpace()); + RuleFor(c => c.AdditionalParameters).Matches(AdditionalParametersRegex) + .When(c => !c.AdditionalParameters.IsNullOrWhiteSpace()); } } @@ -63,16 +71,13 @@ public NewznabSettings() [FieldDefinition(1, Label = "API Key")] public String ApiKey { get; set; } - [FieldDefinition(2, Label = "Categories", - HelpText = "Comma Separated list, leave blank to disable standard/daily shows", Advanced = true)] + [FieldDefinition(2, Label = "Categories", HelpText = "Comma Separated list, leave blank to disable standard/daily shows", Advanced = true)] public IEnumerable Categories { get; set; } - [FieldDefinition(3, Label = "Anime Categories", HelpText = "Comma Separated list, leave blank to disable anime", - Advanced = true)] + [FieldDefinition(3, Label = "Anime Categories", HelpText = "Comma Separated list, leave blank to disable anime", Advanced = true)] public IEnumerable AnimeCategories { get; set; } - [FieldDefinition(4, Label = "Additional Parameters", HelpText = "Additional newznab parameters", Advanced = true - )] + [FieldDefinition(4, Label = "Additional Parameters", HelpText = "Additional newznab parameters", Advanced = true)] public String AdditionalParameters { get; set; } public NzbDroneValidationResult Validate()