Series and Season folder format validation/error handling

This commit is contained in:
Mark McDowall 2014-04-17 11:26:48 -07:00
parent 40c2c0b533
commit fc540067c2
2 changed files with 19 additions and 3 deletions

View File

@ -4,6 +4,7 @@ using System.Linq;
using FluentValidation; using FluentValidation;
using FluentValidation.Results; using FluentValidation.Results;
using Nancy.Responses; using Nancy.Responses;
using NzbDrone.Common;
using NzbDrone.Core.Organizer; using NzbDrone.Core.Organizer;
using Nancy.ModelBinding; using Nancy.ModelBinding;
using NzbDrone.Api.Mapping; using NzbDrone.Api.Mapping;
@ -39,6 +40,7 @@ namespace NzbDrone.Api.Config
SharedValidator.RuleFor(c => c.StandardEpisodeFormat).ValidEpisodeFormat(); SharedValidator.RuleFor(c => c.StandardEpisodeFormat).ValidEpisodeFormat();
SharedValidator.RuleFor(c => c.DailyEpisodeFormat).ValidDailyEpisodeFormat(); SharedValidator.RuleFor(c => c.DailyEpisodeFormat).ValidDailyEpisodeFormat();
SharedValidator.RuleFor(c => c.SeriesFolderFormat).ValidSeriesFolderFormat(); SharedValidator.RuleFor(c => c.SeriesFolderFormat).ValidSeriesFolderFormat();
SharedValidator.RuleFor(c => c.SeasonFolderFormat).ValidSeasonFolderFormat();
} }
private void UpdateNamingConfig(NamingConfigResource resource) private void UpdateNamingConfig(NamingConfigResource resource)
@ -72,7 +74,6 @@ namespace NzbDrone.Api.Config
private JsonResponse<NamingSampleResource> GetExamples(NamingConfigResource config) private JsonResponse<NamingSampleResource> GetExamples(NamingConfigResource config)
{ {
//TODO: Validate that the format is valid
var nameSpec = config.InjectTo<NamingConfig>(); var nameSpec = config.InjectTo<NamingConfig>();
var sampleResource = new NamingSampleResource(); var sampleResource = new NamingSampleResource();
@ -92,8 +93,13 @@ namespace NzbDrone.Api.Config
? "Invalid format" ? "Invalid format"
: dailyEpisodeSampleResult.Filename; : dailyEpisodeSampleResult.Filename;
sampleResource.SeriesFolderExample = _filenameSampleService.GetSeriesFolderSample(nameSpec); sampleResource.SeriesFolderExample = nameSpec.SeriesFolderFormat.IsNullOrWhiteSpace()
sampleResource.SeasonFolderExample = _filenameSampleService.GetSeasonFolderSample(nameSpec); ? "Invalid format"
: _filenameSampleService.GetSeriesFolderSample(nameSpec);
sampleResource.SeasonFolderExample = nameSpec.SeasonFolderFormat.IsNullOrWhiteSpace()
? "Invalid format"
: _filenameSampleService.GetSeasonFolderSample(nameSpec);
return sampleResource.AsResponse(); return sampleResource.AsResponse();
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Text.RegularExpressions;
using FluentValidation; using FluentValidation;
using FluentValidation.Validators; using FluentValidation.Validators;
@ -6,6 +7,9 @@ namespace NzbDrone.Core.Organizer
{ {
public static class FileNameValidation public static class FileNameValidation
{ {
private static readonly Regex SeasonFolderRegex = new Regex(@"(\{season(\:\d+)?\})",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static IRuleBuilderOptions<T, string> ValidEpisodeFormat<T>(this IRuleBuilder<T, string> ruleBuilder) public static IRuleBuilderOptions<T, string> ValidEpisodeFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
{ {
ruleBuilder.SetValidator(new NotEmptyValidator(null)); ruleBuilder.SetValidator(new NotEmptyValidator(null));
@ -23,6 +27,12 @@ namespace NzbDrone.Core.Organizer
ruleBuilder.SetValidator(new NotEmptyValidator(null)); ruleBuilder.SetValidator(new NotEmptyValidator(null));
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.SeriesTitleRegex)).WithMessage("Must contain series title"); return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.SeriesTitleRegex)).WithMessage("Must contain series title");
} }
public static IRuleBuilderOptions<T, string> ValidSeasonFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
{
ruleBuilder.SetValidator(new NotEmptyValidator(null));
return ruleBuilder.SetValidator(new RegularExpressionValidator(SeasonFolderRegex)).WithMessage("Must contain season number");
}
} }
public class ValidDailyEpisodeFormatValidator : PropertyValidator public class ValidDailyEpisodeFormatValidator : PropertyValidator