using System.Collections.Generic; using NzbDrone.Core.CustomFormats; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.MediaInfo; using NzbDrone.Core.Qualities; using NzbDrone.Core.Tv; namespace NzbDrone.Core.Organizer { public interface IFilenameSampleService { SampleResult GetStandardSample(NamingConfig nameSpec); SampleResult GetMultiEpisodeSample(NamingConfig nameSpec); SampleResult GetDailySample(NamingConfig nameSpec); SampleResult GetAnimeSample(NamingConfig nameSpec); SampleResult GetAnimeMultiEpisodeSample(NamingConfig nameSpec); string GetSeriesFolderSample(NamingConfig nameSpec); string GetSeasonFolderSample(NamingConfig nameSpec); string GetSpecialsFolderSample(NamingConfig nameSpec); } public class FileNameSampleService : IFilenameSampleService { private readonly IBuildFileNames _buildFileNames; private static Series _standardSeries; private static Series _dailySeries; private static Series _animeSeries; private static Episode _episode1; private static Episode _episode2; private static Episode _episode3; private static List _singleEpisode; private static List _multiEpisodes; private static EpisodeFile _singleEpisodeFile; private static EpisodeFile _multiEpisodeFile; private static EpisodeFile _dailyEpisodeFile; private static EpisodeFile _animeEpisodeFile; private static EpisodeFile _animeMultiEpisodeFile; private static List _customFormats; public FileNameSampleService(IBuildFileNames buildFileNames) { _buildFileNames = buildFileNames; _standardSeries = new Series { SeriesType = SeriesTypes.Standard, Title = "The Series Title's!", Year = 2010, ImdbId = "tt12345", TvdbId = 12345, TvMazeId = 54321, TmdbId = 11223 }; _dailySeries = new Series { SeriesType = SeriesTypes.Daily, Title = "The Series Title's!", Year = 2010, ImdbId = "tt12345", TvdbId = 12345, TvMazeId = 54321, TmdbId = 11223 }; _animeSeries = new Series { SeriesType = SeriesTypes.Anime, Title = "The Series Title's!", Year = 2010, ImdbId = "tt12345", TvdbId = 12345, TvMazeId = 54321, TmdbId = 11223 }; _episode1 = new Episode { SeasonNumber = 1, EpisodeNumber = 1, Title = "Episode Title (1)", AirDate = "2013-10-30", AbsoluteEpisodeNumber = 1, }; _episode2 = new Episode { SeasonNumber = 1, EpisodeNumber = 2, Title = "Episode Title (2)", AbsoluteEpisodeNumber = 2 }; _episode3 = new Episode { SeasonNumber = 1, EpisodeNumber = 3, Title = "Episode Title (3)", AbsoluteEpisodeNumber = 3 }; _singleEpisode = new List { _episode1 }; _multiEpisodes = new List { _episode1, _episode2, _episode3 }; var mediaInfo = new MediaInfoModel() { VideoFormat = "AVC", VideoBitDepth = 10, VideoColourPrimaries = "bt2020", VideoTransferCharacteristics = "HLG", AudioFormat = "DTS", AudioChannels = 6, AudioChannelPositions = "5.1", AudioLanguages = new List { "ger" }, Subtitles = new List { "eng", "ger" } }; var mediaInfoAnime = new MediaInfoModel() { VideoFormat = "AVC", VideoBitDepth = 10, VideoColourPrimaries = "BT.2020", VideoTransferCharacteristics = "HLG", AudioFormat = "DTS", AudioChannels = 6, AudioChannelPositions = "5.1", AudioLanguages = new List { "jpn" }, Subtitles = new List { "jpn", "eng" } }; _customFormats = new List { new CustomFormat { Name = "Surround Sound", IncludeCustomFormatWhenRenaming = true }, new CustomFormat { Name = "x264", IncludeCustomFormatWhenRenaming = true } }; _singleEpisodeFile = new EpisodeFile { Quality = new QualityModel(Quality.WEBDL1080p, new Revision(2)), RelativePath = "The.Series.Title's!.S01E01.1080p.WEBDL.x264-EVOLVE.mkv", SceneName = "The.Series.Title's!.S01E01.1080p.WEBDL.x264-EVOLVE", ReleaseGroup = "RlsGrp", MediaInfo = mediaInfo }; _multiEpisodeFile = new EpisodeFile { Quality = new QualityModel(Quality.WEBDL1080p, new Revision(2)), RelativePath = "The.Series.Title's!.S01E01-E03.1080p.WEBDL.x264-EVOLVE.mkv", SceneName = "The.Series.Title's!.S01E01-E03.1080p.WEBDL.x264-EVOLVE", ReleaseGroup = "RlsGrp", MediaInfo = mediaInfo, }; _dailyEpisodeFile = new EpisodeFile { Quality = new QualityModel(Quality.WEBDL1080p, new Revision(2)), RelativePath = "The.Series.Title's!.2013.10.30.1080p.WEBDL.x264-EVOLVE.mkv", SceneName = "The.Series.Title's!.2013.10.30.1080p.WEBDL.x264-EVOLVE", ReleaseGroup = "RlsGrp", MediaInfo = mediaInfo }; _animeEpisodeFile = new EpisodeFile { Quality = new QualityModel(Quality.WEBDL1080p, new Revision(2)), RelativePath = "[RlsGroup] The Series Title's! - 001 [1080P].mkv", SceneName = "[RlsGroup] The Series Title's! - 001 [1080P]", ReleaseGroup = "RlsGrp", MediaInfo = mediaInfoAnime }; _animeMultiEpisodeFile = new EpisodeFile { Quality = new QualityModel(Quality.WEBDL1080p, new Revision(2)), RelativePath = "[RlsGroup] The Series Title's! - 001 - 103 [1080p].mkv", SceneName = "[RlsGroup] The Series Title's! - 001 - 103 [1080p]", ReleaseGroup = "RlsGrp", MediaInfo = mediaInfoAnime }; } public SampleResult GetStandardSample(NamingConfig nameSpec) { var result = new SampleResult { FileName = BuildSample(_singleEpisode, _standardSeries, _singleEpisodeFile, nameSpec, _customFormats), Series = _standardSeries, Episodes = _singleEpisode, EpisodeFile = _singleEpisodeFile }; return result; } public SampleResult GetMultiEpisodeSample(NamingConfig nameSpec) { var result = new SampleResult { FileName = BuildSample(_multiEpisodes, _standardSeries, _multiEpisodeFile, nameSpec, _customFormats), Series = _standardSeries, Episodes = _multiEpisodes, EpisodeFile = _multiEpisodeFile }; return result; } public SampleResult GetDailySample(NamingConfig nameSpec) { var result = new SampleResult { FileName = BuildSample(_singleEpisode, _dailySeries, _dailyEpisodeFile, nameSpec, _customFormats), Series = _dailySeries, Episodes = _singleEpisode, EpisodeFile = _dailyEpisodeFile }; return result; } public SampleResult GetAnimeSample(NamingConfig nameSpec) { var result = new SampleResult { FileName = BuildSample(_singleEpisode, _animeSeries, _animeEpisodeFile, nameSpec, _customFormats), Series = _animeSeries, Episodes = _singleEpisode, EpisodeFile = _animeEpisodeFile }; return result; } public SampleResult GetAnimeMultiEpisodeSample(NamingConfig nameSpec) { var result = new SampleResult { FileName = BuildSample(_multiEpisodes, _animeSeries, _animeMultiEpisodeFile, nameSpec, _customFormats), Series = _animeSeries, Episodes = _multiEpisodes, EpisodeFile = _animeMultiEpisodeFile }; return result; } public string GetSeriesFolderSample(NamingConfig nameSpec) { return _buildFileNames.GetSeriesFolder(_standardSeries, nameSpec); } public string GetSeasonFolderSample(NamingConfig nameSpec) { return _buildFileNames.GetSeasonFolder(_standardSeries, _episode1.SeasonNumber, nameSpec); } public string GetSpecialsFolderSample(NamingConfig nameSpec) { return _buildFileNames.GetSeasonFolder(_standardSeries, 0, nameSpec); } private string BuildSample(List episodes, Series series, EpisodeFile episodeFile, NamingConfig nameSpec, List customFormats) { try { return _buildFileNames.BuildFileName(episodes, series, episodeFile, "", nameSpec, customFormats); } catch (NamingFormatException) { return string.Empty; } } } }