using System.Collections.Generic ;
using FluentValidation ;
using Nancy.Responses ;
using NzbDrone.Core.MediaFiles ;
using NzbDrone.Core.Organizer ;
using NzbDrone.Core.Qualities ;
using NzbDrone.Core.Tv ;
using Nancy.ModelBinding ;
using NzbDrone.Api.Mapping ;
using NzbDrone.Api.Extensions ;
namespace NzbDrone.Api.Config
{
public class NamingModule : NzbDroneRestModule < NamingConfigResource >
{
private readonly INamingConfigService _namingConfigService ;
private readonly IBuildFileNames _buildFileNames ;
public NamingModule ( INamingConfigService namingConfigService , IBuildFileNames buildFileNames )
: base ( "config/naming" )
{
_namingConfigService = namingConfigService ;
_buildFileNames = buildFileNames ;
GetResourceSingle = GetNamingConfig ;
GetResourceById = GetNamingConfig ;
UpdateResource = UpdateNamingConfig ;
Get [ "/samples" ] = x = > GetExamples ( this . Bind < NamingConfigResource > ( ) ) ;
SharedValidator . RuleFor ( c = > c . MultiEpisodeStyle ) . InclusiveBetween ( 0 , 3 ) ;
SharedValidator . RuleFor ( c = > c . NumberStyle ) . InclusiveBetween ( 0 , 3 ) ;
SharedValidator . RuleFor ( c = > c . Separator ) . Matches ( @"\s|\s\-\s|\." ) ;
}
private void UpdateNamingConfig ( NamingConfigResource resource )
{
_namingConfigService . Save ( resource . InjectTo < NamingConfig > ( ) ) ;
}
private NamingConfigResource GetNamingConfig ( )
{
return _namingConfigService . GetConfig ( ) . InjectTo < NamingConfigResource > ( ) ;
}
private NamingConfigResource GetNamingConfig ( int id )
{
return GetNamingConfig ( ) ;
}
private JsonResponse < NamingSampleResource > GetExamples ( NamingConfigResource config )
{
var nameSpec = config . InjectTo < NamingConfig > ( ) ;
var series = new Core . Tv . Series
{
SeriesType = SeriesTypes . Standard ,
Title = "Series Title"
} ;
var episode1 = new Episode
{
SeasonNumber = 1 ,
EpisodeNumber = 1 ,
Title = "Episode Title (1)"
} ;
var episode2 = new Episode
{
SeasonNumber = 1 ,
EpisodeNumber = 2 ,
Title = "Episode Title (2)"
} ;
var episodeFile = new EpisodeFile
{
Quality = new QualityModel ( Quality . HDTV720p ) ,
Path = @"C:\Test\Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv"
} ;
var sampleResource = new NamingSampleResource ( ) ;
sampleResource . SingleEpisodeExample = _buildFileNames . BuildFilename ( new List < Episode > { episode1 } ,
series ,
episodeFile ,
nameSpec ) ;
episodeFile . Path = @"C:\Test\Series.Title.S01E01-E02.720p.HDTV.x264-EVOLVE.mkv" ;
sampleResource . MultiEpisodeExample = _buildFileNames . BuildFilename ( new List < Episode > { episode1 , episode2 } ,
series ,
episodeFile ,
nameSpec ) ;
return sampleResource . AsResponse ( ) ;
}
}
}