Fixed: Empty Sabnzbd category is now properly handled. But added UI validation to recommend adding a category.

This commit is contained in:
Taloth Saldono
2015-02-18 00:43:33 +01:00
parent a8e805fd5d
commit 6803e46782
20 changed files with 207 additions and 54 deletions
+34 -22
View File
@@ -2,12 +2,14 @@
using System.Collections.Generic;
using System.Linq;
using FluentValidation;
using FluentValidation.Results;
using Nancy;
using NzbDrone.Api.ClientSchema;
using NzbDrone.Api.Extensions;
using NzbDrone.Api.Mapping;
using NzbDrone.Common.Reflection;
using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.Validation;
using Omu.ValueInjecter;
namespace NzbDrone.Api
@@ -72,12 +74,9 @@ namespace NzbDrone.Api
private int CreateProvider(TProviderResource providerResource)
{
var providerDefinition = GetDefinition(providerResource);
var providerDefinition = GetDefinition(providerResource, false);
if (providerDefinition.Enable)
{
Test(providerDefinition);
}
Test(providerDefinition, false);
providerDefinition = _providerFactory.Create(providerDefinition);
@@ -86,12 +85,14 @@ namespace NzbDrone.Api
private void UpdateProvider(TProviderResource providerResource)
{
var providerDefinition = GetDefinition(providerResource);
var providerDefinition = GetDefinition(providerResource, false);
Test(providerDefinition, false);
_providerFactory.Update(providerDefinition);
}
private TProviderDefinition GetDefinition(TProviderResource providerResource)
private TProviderDefinition GetDefinition(TProviderResource providerResource, bool includeWarnings = false)
{
var definition = new TProviderDefinition();
@@ -105,7 +106,7 @@ namespace NzbDrone.Api
var configContract = ReflectionExtensions.CoreAssembly.FindTypeByName(definition.ConfigContract);
definition.Settings = (IProviderConfig)SchemaBuilder.ReadFormSchema(providerResource.Fields, configContract, preset);
Validate(definition);
Validate(definition, includeWarnings);
return definition;
}
@@ -149,31 +150,42 @@ namespace NzbDrone.Api
private Response Test(TProviderResource providerResource)
{
var providerDefinition = GetDefinition(providerResource);
var providerDefinition = GetDefinition(providerResource, true);
Test(providerDefinition);
Test(providerDefinition, true);
return "{}";
}
private void Test(TProviderDefinition providerDefinition)
protected virtual void Validate(TProviderDefinition definition, bool includeWarnings)
{
var result = _providerFactory.Test(providerDefinition);
var validationResult = definition.Settings.Validate();
VerifyValidationResult(validationResult, includeWarnings);
}
protected virtual void Test(TProviderDefinition definition, bool includeWarnings)
{
if (!definition.Enable) return;
var validationResult = _providerFactory.Test(definition);
VerifyValidationResult(validationResult, includeWarnings);
}
protected void VerifyValidationResult(ValidationResult validationResult, bool includeWarnings)
{
var result = new NzbDroneValidationResult(validationResult.Errors);
if (includeWarnings && (!result.IsValid || result.HasWarnings))
{
throw new ValidationException(result.Failures);
}
if (!result.IsValid)
{
throw new ValidationException(result.Errors);
}
}
protected virtual void Validate(TProviderDefinition definition)
{
var validationResult = definition.Settings.Validate();
if (!validationResult.IsValid)
{
throw new ValidationException(validationResult.Errors);
}
}
}
}