diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js index b4cecf07d..828a42013 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js @@ -49,7 +49,8 @@ const seriesTokens = [ { token: '{Series TitleThe}', example: 'Series Title, The' }, { token: '{Series TitleTheYear}', example: 'Series Title, The (2010)' }, { token: '{Series TitleYear}', example: 'Series Title (2010)' }, - { token: '{Series TitleFirstCharacter}', example: 'S' } + { token: '{Series TitleFirstCharacter}', example: 'S' }, + { token: '{Series Year}', example: '2010' } ]; const seriesIdTokens = [ diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesYearFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesYearFixture.cs new file mode 100644 index 000000000..5da9e84ff --- /dev/null +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/SeriesYearFixture.cs @@ -0,0 +1,48 @@ +using System.Linq; +using FizzWare.NBuilder; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Organizer; +using NzbDrone.Core.Qualities; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests +{ + [TestFixture] + public class SeriesYearFixture : CoreTest + { + private Series _series; + private NamingConfig _namingConfig; + + [SetUp] + public void Setup() + { + _series = Builder + .CreateNew() + .Build(); + + _namingConfig = NamingConfig.Default; + _namingConfig.RenameEpisodes = true; + + Mocker.GetMock() + .Setup(c => c.GetConfig()).Returns(_namingConfig); + + Mocker.GetMock() + .Setup(v => v.Get(Moq.It.IsAny())) + .Returns(v => Quality.DefaultQualityDefinitions.First(c => c.Quality == v)); + } + + [TestCase("The Mist", 2017, "2017\\The Mist")] + [TestCase("A", 2021, "2021\\A")] + [TestCase("30 Rock", 2006, "2006\\30 Rock")] + public void should_get_expected_folder_name_back(string title, int year, string expected) + { + _series.Title = title; + _series.Year = year; + _namingConfig.SeriesFolderFormat = "{Series Year}\\{Series Title}"; + + Subject.GetSeriesFolder(_series).Should().Be(expected); + } + } +} diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index df03b5de9..898462068 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -419,6 +419,7 @@ namespace NzbDrone.Core.Organizer tokenHandlers["{Series TitleYear}"] = m => TitleYear(series.Title, series.Year); tokenHandlers["{Series TitleTheYear}"] = m => TitleYear(TitleThe(series.Title), series.Year); tokenHandlers["{Series TitleFirstCharacter}"] = m => TitleThe(series.Title).Substring(0, 1).FirstCharToUpper(); + tokenHandlers["{Series Year}"] = m => series.Year.ToString(); } private string AddSeasonEpisodeNumberingTokens(string pattern, Dictionary> tokenHandlers, List episodes, NamingConfig namingConfig)