Using season:00 instead of 0season

pull/4/head
Mark McDowall 11 years ago
parent 41cb5c02e8
commit 48ece3d367

@ -26,9 +26,9 @@ namespace NzbDrone.Core.Test.OrganizerTests
} }
[Test] [Test]
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season {0season}", @"C:\Test\30 Rock\Season 01\30 Rock - S01E05 - Episode Title.mkv")] [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season {season:00}", @"C:\Test\30 Rock\Season 01\30 Rock - S01E05 - Episode Title.mkv")]
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season {season}", @"C:\Test\30 Rock\Season 1\30 Rock - S01E05 - Episode Title.mkv")] [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "Season {season}", @"C:\Test\30 Rock\Season 1\30 Rock - S01E05 - Episode Title.mkv")]
[TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season {0season}", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")] [TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season {season:00}", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")]
[TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season {season}", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")] [TestCase("30 Rock - S01E05 - Episode Title", 1, false, "Season {season}", @"C:\Test\30 Rock\30 Rock - S01E05 - Episode Title.mkv")]
[TestCase("30 Rock - S01E05 - Episode Title", 1, true, "ReallyUglySeasonFolder {season}", @"C:\Test\30 Rock\ReallyUglySeasonFolder 1\30 Rock - S01E05 - Episode Title.mkv")] [TestCase("30 Rock - S01E05 - Episode Title", 1, true, "ReallyUglySeasonFolder {season}", @"C:\Test\30 Rock\ReallyUglySeasonFolder 1\30 Rock - S01E05 - Episode Title.mkv")]
[TestCase("30 Rock - S00E05 - Episode Title", 0, true, "Season {season}", @"C:\Test\30 Rock\Specials\30 Rock - S00E05 - Episode Title.mkv")] [TestCase("30 Rock - S00E05 - Episode Title", 0, true, "Season {season}", @"C:\Test\30 Rock\Specials\30 Rock - S00E05 - Episode Title.mkv")]

@ -120,8 +120,6 @@ namespace NzbDrone.Core.Test.OrganizerTests
.Should().Be("south park"); .Should().Be("south park");
} }
[Test] [Test]
public void should_replace_episode_title() public void should_replace_episode_title()
{ {
@ -151,10 +149,10 @@ namespace NzbDrone.Core.Test.OrganizerTests
} }
[Test] [Test]
public void should_replace_0season_number_with_two_digits() public void should_replace_season00_number_with_two_digits()
{ {
_episode1.SeasonNumber = 1; _episode1.SeasonNumber = 1;
_namingConfig.StandardEpisodeFormat = "{0season}x{episode}"; _namingConfig.StandardEpisodeFormat = "{season:00}x{episode}";
Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile) Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile)
.Should().Be("01x6"); .Should().Be("01x6");
@ -171,10 +169,10 @@ namespace NzbDrone.Core.Test.OrganizerTests
} }
[Test] [Test]
public void should_replace_0episode_number_with_two_digits() public void should_replace_episode00_number_with_two_digits()
{ {
_episode1.SeasonNumber = 1; _episode1.SeasonNumber = 1;
_namingConfig.StandardEpisodeFormat = "{season}x{0episode}"; _namingConfig.StandardEpisodeFormat = "{season}x{episode:00}";
Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile) Subject.BuildFilename(new List<Episode> { _episode1 }, _series, _episodeFile)
.Should().Be("1x06"); .Should().Be("1x06");
@ -202,7 +200,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_replace_all_contents_in_pattern() public void should_replace_all_contents_in_pattern()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title} [{Quality Title}]"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title} [{Quality Title}]";
Subject.BuildFilename(new List<Episode> {_episode1}, _series, _episodeFile) Subject.BuildFilename(new List<Episode> {_episode1}, _series, _episodeFile)
.Should().Be("South Park - S15E06 - City Sushi [HDTV-720p]"); .Should().Be("South Park - S15E06 - City Sushi [HDTV-720p]");
@ -232,7 +230,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_only_have_one_episodeTitle_when_episode_titles_are_the_same() public void should_only_have_one_episodeTitle_when_episode_titles_are_the_same()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 3; _namingConfig.MultiEpisodeStyle = 3;
var episode = Builder<Episode>.CreateNew() var episode = Builder<Episode>.CreateNew()
@ -255,7 +253,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_have_two_episodeTitles_when_episode_titles_are_not_the_same() public void should_have_two_episodeTitles_when_episode_titles_are_not_the_same()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 3; _namingConfig.MultiEpisodeStyle = 3;
_episode1.Title = "Hello"; _episode1.Title = "Hello";
@ -298,7 +296,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_format_extend_multi_episode_properly() public void should_format_extend_multi_episode_properly()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 0; _namingConfig.MultiEpisodeStyle = 0;
Subject.BuildFilename(new List<Episode> {_episode1, _episode2}, _series, _episodeFile) Subject.BuildFilename(new List<Episode> {_episode1, _episode2}, _series, _episodeFile)
@ -308,7 +306,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_format_duplicate_multi_episode_properly() public void should_format_duplicate_multi_episode_properly()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 1; _namingConfig.MultiEpisodeStyle = 1;
Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile) Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile)
@ -318,7 +316,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_format_repeat_multi_episode_properly() public void should_format_repeat_multi_episode_properly()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 2; _namingConfig.MultiEpisodeStyle = 2;
Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile) Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile)
@ -328,7 +326,7 @@ namespace NzbDrone.Core.Test.OrganizerTests
[Test] [Test]
public void should_format_scene_multi_episode_properly() public void should_format_scene_multi_episode_properly()
{ {
_namingConfig.StandardEpisodeFormat = "{Series Title} - S{0season}E{0episode} - {Episode Title}"; _namingConfig.StandardEpisodeFormat = "{Series Title} - S{season:00}E{episode:00} - {Episode Title}";
_namingConfig.MultiEpisodeStyle = 3; _namingConfig.MultiEpisodeStyle = 3;
Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile) Subject.BuildFilename(new List<Episode> { _episode1, _episode2 }, _series, _episodeFile)

@ -103,7 +103,7 @@ namespace NzbDrone.Core.Datastore.Migration
{ {
Id = 0, Id = 0,
Name = "1x05", Name = "1x05",
Pattern = "{season}x{0episode}", Pattern = "{season}x{episode:00}",
EpisodeSeparator = "x" EpisodeSeparator = "x"
}, },
@ -111,21 +111,21 @@ namespace NzbDrone.Core.Datastore.Migration
{ {
Id = 1, Id = 1,
Name = "01x05", Name = "01x05",
Pattern = "{0season}x{0episode}", Pattern = "{season:00}x{episode:00}",
EpisodeSeparator = "x" EpisodeSeparator = "x"
}, },
new new
{ {
Id = 2, Id = 2,
Name = "S01E05", Name = "S01E05",
Pattern = "S{0season}E{0episode}", Pattern = "S{season:00}E{episode:00}",
EpisodeSeparator = "E" EpisodeSeparator = "E"
}, },
new new
{ {
Id = 3, Id = 3,
Name = "s01e05", Name = "s01e05",
Pattern = "s{0season}e{0episode}", Pattern = "s{season:00}e{episode:00}",
EpisodeSeparator = "e" EpisodeSeparator = "e"
} }
}; };

@ -28,9 +28,9 @@ namespace NzbDrone.Core.Datastore.Migration
value = value.Replace("%sn", "{Series Title}") value = value.Replace("%sn", "{Series Title}")
.Replace("%s.n", "{Series.Title}") .Replace("%s.n", "{Series.Title}")
.Replace("%s", "{season}") .Replace("%s", "{season}")
.Replace("%0s", "{0season}") .Replace("%0s", "{season:00}")
.Replace("%e", "{episode}") .Replace("%e", "{episode}")
.Replace("%0e", "{0episode}"); .Replace("%0e", "{episode:00}");
using (IDbCommand updateCmd = conn.CreateCommand()) using (IDbCommand updateCmd = conn.CreateCommand())

@ -28,13 +28,13 @@ namespace NzbDrone.Core.Organizer
private static readonly Regex TitleRegex = new Regex(@"(?<token>\{(?:\w+)(?<separator>\s|\W|_)\w+\})", private static readonly Regex TitleRegex = new Regex(@"(?<token>\{(?:\w+)(?<separator>\s|\W|_)\w+\})",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex EpisodeRegex = new Regex(@"(?<episode>\{0*(?:episode)})", private static readonly Regex EpisodeRegex = new Regex(@"(?<episode>\{episode(?:\:0+)?})",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex SeasonRegex = new Regex(@"(?<season>\{0*(?:season)})", private static readonly Regex SeasonRegex = new Regex(@"(?<season>\{season(?:\:0+)?})",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
private static readonly Regex SeasonEpisodePatternRegex = new Regex(@"(?<separator>(?<=}).+?)?(?<seasonEpisode>s?{0?season}(?<episodeSeparator>e|x)?(?<episode>{0?episode}))(?<separator>.+?(?={))?", private static readonly Regex SeasonEpisodePatternRegex = new Regex(@"(?<separator>(?<=}).+?)?(?<seasonEpisode>s?{season(?:\:0+)?}(?<episodeSeparator>e|x)?(?<episode>{episode(?:\:0+)?}))(?<separator>.+?(?={))?",
RegexOptions.Compiled | RegexOptions.IgnoreCase); RegexOptions.Compiled | RegexOptions.IgnoreCase);
public FileNameBuilder(INamingConfigService namingConfigService, IConfigService configService, Logger logger) public FileNameBuilder(INamingConfigService namingConfigService, IConfigService configService, Logger logger)
@ -240,10 +240,11 @@ namespace NzbDrone.Core.Organizer
private string ReplaceNumberToken(string token, int value) private string ReplaceNumberToken(string token, int value)
{ {
var zeroCount = token.Count(z => z == '0'); var split = token.Trim('{', '}').Split(':');
return value.ToString().PadLeft(zeroCount + 1, '0'); if (split.Length == 1) return value.ToString("0");
}
return value.ToString(split[1]);
}
} }
public enum MultiEpisodeStyle public enum MultiEpisodeStyle

@ -26,7 +26,7 @@ namespace NzbDrone.Integration.Test
{ {
var config = NamingConfig.GetSingle(); var config = NamingConfig.GetSingle();
config.RenameEpisodes = false; config.RenameEpisodes = false;
config.StandardEpisodeFormat = "{Series Title} - {season}x{0episode} - {Episode Title}"; config.StandardEpisodeFormat = "{Series Title} - {season}x{episode:00} - {Episode Title}";
config.DailyEpisodeFormat = "{Series Title} - {Air-Date} - {Episode Title}"; config.DailyEpisodeFormat = "{Series Title} - {Air-Date} - {Episode Title}";
var result = NamingConfig.Put(config); var result = NamingConfig.Put(config);

@ -2,6 +2,6 @@
<a href="#" tabindex="-1" data-token="episode">Episode</a> <a href="#" tabindex="-1" data-token="episode">Episode</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#" data-token="episode">1</a></li> <li><a href="#" data-token="episode">1</a></li>
<li><a href="#" data-token="0episode">01</a></li> <li><a href="#" data-token="episode:00">01</a></li>
</ul> </ul>
</li> </li>

@ -2,6 +2,6 @@
<a href="#" tabindex="-1" data-token="season">Season</a> <a href="#" tabindex="-1" data-token="season">Season</a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#" data-token="season">1</a></li> <li><a href="#" data-token="season">1</a></li>
<li><a href="#" data-token="0season">01</a></li> <li><a href="#" data-token="season:00">01</a></li>
</ul> </ul>
</li> </li>

@ -84,16 +84,16 @@ define(
switch (this.model.get('numberStyle')) { switch (this.model.get('numberStyle')) {
case '0': case '0':
this.standardEpisodeFormat += '{season}x{0episode}'; this.standardEpisodeFormat += '{season}x{episode:00}';
break; break;
case '1': case '1':
this.standardEpisodeFormat += '{0season}x{0episode}'; this.standardEpisodeFormat += '{season:00}x{episode:00}';
break; break;
case '2': case '2':
this.standardEpisodeFormat += 'S{0season}E{0episode}'; this.standardEpisodeFormat += 'S{season:00}E{episode:00}';
break; break;
case '3': case '3':
this.standardEpisodeFormat += 's{0season}e{0episode}'; this.standardEpisodeFormat += 's{season:00}e{episode:00}';
break; break;
default: default:
this.standardEpisodeFormat += 'Unknown Number Pattern'; this.standardEpisodeFormat += 'Unknown Number Pattern';

Loading…
Cancel
Save