2016-12-23 21:45:24 +00:00
using System.Collections.Generic ;
2013-11-16 09:22:31 +00:00
using System.Linq ;
2013-08-26 05:14:55 +00:00
using FluentValidation ;
2013-11-15 08:53:12 +00:00
using FluentValidation.Results ;
2013-08-26 05:14:55 +00:00
using Nancy.Responses ;
2014-12-02 06:26:25 +00:00
using NzbDrone.Common.Extensions ;
2013-07-24 00:35:35 +00:00
using NzbDrone.Core.Organizer ;
2013-08-26 05:14:55 +00:00
using Nancy.ModelBinding ;
using NzbDrone.Api.Extensions ;
2013-07-24 00:35:35 +00:00
namespace NzbDrone.Api.Config
{
2014-02-16 09:56:12 +00:00
public class NamingConfigModule : NzbDroneRestModule < NamingConfigResource >
2013-07-24 00:35:35 +00:00
{
private readonly INamingConfigService _namingConfigService ;
2013-11-16 05:03:42 +00:00
private readonly IFilenameSampleService _filenameSampleService ;
private readonly IFilenameValidationService _filenameValidationService ;
2013-11-22 07:44:43 +00:00
private readonly IBuildFileNames _filenameBuilder ;
2013-07-24 00:35:35 +00:00
2014-02-16 09:56:12 +00:00
public NamingConfigModule ( INamingConfigService namingConfigService ,
2013-11-16 05:03:42 +00:00
IFilenameSampleService filenameSampleService ,
2013-11-22 07:44:43 +00:00
IFilenameValidationService filenameValidationService ,
IBuildFileNames filenameBuilder )
2013-07-24 00:35:35 +00:00
: base ( "config/naming" )
{
_namingConfigService = namingConfigService ;
2013-11-16 05:03:42 +00:00
_filenameSampleService = filenameSampleService ;
_filenameValidationService = filenameValidationService ;
2013-11-22 07:44:43 +00:00
_filenameBuilder = filenameBuilder ;
2013-07-24 00:35:35 +00:00
GetResourceSingle = GetNamingConfig ;
2013-08-28 00:16:24 +00:00
GetResourceById = GetNamingConfig ;
2013-07-24 00:35:35 +00:00
UpdateResource = UpdateNamingConfig ;
2013-08-26 05:14:55 +00:00
Get [ "/samples" ] = x = > GetExamples ( this . Bind < NamingConfigResource > ( ) ) ;
2015-01-01 06:40:37 +00:00
SharedValidator . RuleFor ( c = > c . MultiEpisodeStyle ) . InclusiveBetween ( 0 , 5 ) ;
2017-01-10 16:05:37 +00:00
/ * SharedValidator . RuleFor ( c = > c . StandardEpisodeFormat ) . ValidEpisodeFormat ( ) ;
2013-11-22 17:17:04 +00:00
SharedValidator . RuleFor ( c = > c . DailyEpisodeFormat ) . ValidDailyEpisodeFormat ( ) ;
2014-05-19 19:14:41 +00:00
SharedValidator . RuleFor ( c = > c . AnimeEpisodeFormat ) . ValidAnimeEpisodeFormat ( ) ;
2014-01-17 18:43:15 +00:00
SharedValidator . RuleFor ( c = > c . SeriesFolderFormat ) . ValidSeriesFolderFormat ( ) ;
2017-01-10 16:05:37 +00:00
SharedValidator . RuleFor ( c = > c . SeasonFolderFormat ) . ValidSeasonFolderFormat ( ) ; * /
2017-01-07 00:32:19 +00:00
SharedValidator . RuleFor ( c = > c . StandardMovieFormat ) . ValidMovieFormat ( ) ;
SharedValidator . RuleFor ( c = > c . MovieFolderFormat ) . ValidMovieFolderFormat ( ) ;
2013-07-24 00:35:35 +00:00
}
2013-08-26 05:14:55 +00:00
private void UpdateNamingConfig ( NamingConfigResource resource )
2013-07-24 00:35:35 +00:00
{
2016-03-25 00:56:29 +00:00
var nameSpec = resource . ToModel ( ) ;
2013-11-15 08:53:12 +00:00
ValidateFormatResult ( nameSpec ) ;
_namingConfigService . Save ( nameSpec ) ;
2013-07-24 00:35:35 +00:00
}
private NamingConfigResource GetNamingConfig ( )
{
2013-11-22 07:44:43 +00:00
var nameSpec = _namingConfigService . GetConfig ( ) ;
2016-03-25 00:56:29 +00:00
var resource = nameSpec . ToResource ( ) ;
2013-11-22 16:59:03 +00:00
2017-01-07 00:32:19 +00:00
//if (resource.StandardEpisodeFormat.IsNotNullOrWhiteSpace())
//{
// var basicConfig = _filenameBuilder.GetBasicNamingConfig(nameSpec);
// basicConfig.AddToResource(resource);
//}
if ( resource . StandardMovieFormat . IsNotNullOrWhiteSpace ( ) )
2013-11-22 16:59:03 +00:00
{
2016-03-25 00:56:29 +00:00
var basicConfig = _filenameBuilder . GetBasicNamingConfig ( nameSpec ) ;
basicConfig . AddToResource ( resource ) ;
2013-11-22 16:59:03 +00:00
}
2013-11-22 07:44:43 +00:00
return resource ;
2013-08-26 05:14:55 +00:00
}
2013-08-28 00:16:24 +00:00
private NamingConfigResource GetNamingConfig ( int id )
{
return GetNamingConfig ( ) ;
}
2013-08-26 05:14:55 +00:00
private JsonResponse < NamingSampleResource > GetExamples ( NamingConfigResource config )
{
2016-03-25 00:56:29 +00:00
var nameSpec = config . ToModel ( ) ;
2013-08-26 05:14:55 +00:00
var sampleResource = new NamingSampleResource ( ) ;
2013-11-16 05:03:42 +00:00
2017-01-07 03:51:15 +00:00
//var singleEpisodeSampleResult = _filenameSampleService.GetStandardSample(nameSpec);
//var multiEpisodeSampleResult = _filenameSampleService.GetMultiEpisodeSample(nameSpec);
//var dailyEpisodeSampleResult = _filenameSampleService.GetDailySample(nameSpec);
//var animeEpisodeSampleResult = _filenameSampleService.GetAnimeSample(nameSpec);
//var animeMultiEpisodeSampleResult = _filenameSampleService.GetAnimeMultiEpisodeSample(nameSpec);
2013-08-26 05:14:55 +00:00
2017-01-07 03:51:15 +00:00
var movieSampleResult = _filenameSampleService . GetMovieSample ( nameSpec ) ;
2013-08-26 05:14:55 +00:00
2017-01-07 03:51:15 +00:00
//sampleResource.SingleEpisodeExample = _filenameValidationService.ValidateStandardFilename(singleEpisodeSampleResult) != null
// ? "Invalid format"
// : singleEpisodeSampleResult.FileName;
2013-11-10 04:20:45 +00:00
2017-01-07 03:51:15 +00:00
//sampleResource.MultiEpisodeExample = _filenameValidationService.ValidateStandardFilename(multiEpisodeSampleResult) != null
// ? "Invalid format"
// : multiEpisodeSampleResult.FileName;
2013-08-26 05:14:55 +00:00
2017-01-07 03:51:15 +00:00
//sampleResource.DailyEpisodeExample = _filenameValidationService.ValidateDailyFilename(dailyEpisodeSampleResult) != null
// ? "Invalid format"
// : dailyEpisodeSampleResult.FileName;
2014-05-19 19:14:41 +00:00
2017-01-07 03:51:15 +00:00
//sampleResource.AnimeEpisodeExample = _filenameValidationService.ValidateAnimeFilename(animeEpisodeSampleResult) != null
// ? "Invalid format"
// : animeEpisodeSampleResult.FileName;
2014-11-17 05:31:53 +00:00
2017-01-07 03:51:15 +00:00
//sampleResource.AnimeMultiEpisodeExample = _filenameValidationService.ValidateAnimeFilename(animeMultiEpisodeSampleResult) != null
// ? "Invalid format"
// : animeMultiEpisodeSampleResult.FileName;
2017-01-07 09:42:21 +00:00
sampleResource . MovieExample = nameSpec . StandardMovieFormat . IsNullOrWhiteSpace ( )
2017-01-07 03:51:15 +00:00
? "Invalid Format"
: movieSampleResult . FileName ;
//sampleResource.SeriesFolderExample = nameSpec.SeriesFolderFormat.IsNullOrWhiteSpace()
// ? "Invalid format"
// : _filenameSampleService.GetSeriesFolderSample(nameSpec);
//sampleResource.SeasonFolderExample = nameSpec.SeasonFolderFormat.IsNullOrWhiteSpace()
// ? "Invalid format"
// : _filenameSampleService.GetSeasonFolderSample(nameSpec);
2014-04-17 18:26:48 +00:00
2017-01-07 03:51:15 +00:00
sampleResource . MovieFolderExample = nameSpec . MovieFolderFormat . IsNullOrWhiteSpace ( )
2014-04-17 18:26:48 +00:00
? "Invalid format"
2017-01-07 03:51:15 +00:00
: _filenameSampleService . GetMovieFolderSample ( nameSpec ) ;
2014-04-15 14:16:49 +00:00
2013-08-26 05:14:55 +00:00
return sampleResource . AsResponse ( ) ;
2013-07-24 00:35:35 +00:00
}
2013-11-10 04:20:45 +00:00
2013-11-15 08:53:12 +00:00
private void ValidateFormatResult ( NamingConfig nameSpec )
{
2013-11-16 05:03:42 +00:00
var singleEpisodeSampleResult = _filenameSampleService . GetStandardSample ( nameSpec ) ;
var multiEpisodeSampleResult = _filenameSampleService . GetMultiEpisodeSample ( nameSpec ) ;
var dailyEpisodeSampleResult = _filenameSampleService . GetDailySample ( nameSpec ) ;
2014-11-17 05:31:53 +00:00
var animeEpisodeSampleResult = _filenameSampleService . GetAnimeSample ( nameSpec ) ;
var animeMultiEpisodeSampleResult = _filenameSampleService . GetAnimeMultiEpisodeSample ( nameSpec ) ;
2017-01-07 03:51:15 +00:00
var movieSampleResult = _filenameSampleService . GetMovieSample ( nameSpec ) ;
2017-01-07 00:32:19 +00:00
2013-11-16 05:03:42 +00:00
var singleEpisodeValidationResult = _filenameValidationService . ValidateStandardFilename ( singleEpisodeSampleResult ) ;
var multiEpisodeValidationResult = _filenameValidationService . ValidateStandardFilename ( multiEpisodeSampleResult ) ;
var dailyEpisodeValidationResult = _filenameValidationService . ValidateDailyFilename ( dailyEpisodeSampleResult ) ;
2014-11-17 05:31:53 +00:00
var animeEpisodeValidationResult = _filenameValidationService . ValidateAnimeFilename ( animeEpisodeSampleResult ) ;
var animeMultiEpisodeValidationResult = _filenameValidationService . ValidateAnimeFilename ( animeMultiEpisodeSampleResult ) ;
2013-11-15 08:53:12 +00:00
2017-01-07 09:42:21 +00:00
//var standardMovieValidationResult = _filenameValidationService.ValidateMovieFilename(movieSampleResult); For now, let's hope the user is not stupid enough :/
2017-01-07 00:32:19 +00:00
2013-11-16 05:03:42 +00:00
var validationFailures = new List < ValidationFailure > ( ) ;
2013-11-15 08:53:12 +00:00
2017-01-07 09:42:21 +00:00
//validationFailures.AddIfNotNull(singleEpisodeValidationResult);
//validationFailures.AddIfNotNull(multiEpisodeValidationResult);
//validationFailures.AddIfNotNull(dailyEpisodeValidationResult);
//validationFailures.AddIfNotNull(animeEpisodeValidationResult);
//validationFailures.AddIfNotNull(animeMultiEpisodeValidationResult);
2013-11-15 08:53:12 +00:00
2017-01-07 09:42:21 +00:00
//validationFailures.AddIfNotNull(standardMovieValidationResult);
2017-01-07 00:32:19 +00:00
2013-11-16 09:22:31 +00:00
if ( validationFailures . Any ( ) )
{
2014-11-29 19:17:20 +00:00
throw new ValidationException ( validationFailures . DistinctBy ( v = > v . PropertyName ) . ToArray ( ) ) ;
2013-11-16 09:22:31 +00:00
}
2013-11-15 08:53:12 +00:00
}
2013-07-24 00:35:35 +00:00
}
2013-11-16 05:03:42 +00:00
}