From 72b307f4ad0f4dce671823047e086a45a3fd26ed Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Mon, 6 Feb 2023 16:55:04 -0800 Subject: [PATCH] Fixed: Using absolute episode number in Standard Format for episode without while renaming --- .../AbsoluteEpisodeFormatFixture.cs | 11 +++++++++++ src/NzbDrone.Core/Organizer/FileNameBuilder.cs | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/AbsoluteEpisodeFormatFixture.cs b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/AbsoluteEpisodeFormatFixture.cs index e658d0902..751621053 100644 --- a/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/AbsoluteEpisodeFormatFixture.cs +++ b/src/NzbDrone.Core.Test/OrganizerTests/FileNameBuilderTests/AbsoluteEpisodeFormatFixture.cs @@ -83,5 +83,16 @@ namespace NzbDrone.Core.Test.OrganizerTests.FileNameBuilderTests Subject.BuildFileName(new List { _episode }, _series, _episodeFile) .Should().Be("Anime Series S15E06 [SonarrTest]"); } + + [Test] + public void should_use_standard_format_without_absolute_numbering_if_absolute_format_requires_absolute_episode_number_and_it_is_missing() + { + _episode.AbsoluteEpisodeNumber = null; + _namingConfig.StandardEpisodeFormat = "{Series Title} S{season:00}E{episode:00} - {absolute:00}"; + _namingConfig.AnimeEpisodeFormat = "{Series Title} {absolute:00} [{ReleaseGroup}]"; + + Subject.BuildFileName(new List { _episode }, _series, _episodeFile) + .Should().Be("Anime Series S15E06"); + } } } diff --git a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs index 86cc2d294..9b4d96a84 100644 --- a/src/NzbDrone.Core/Organizer/FileNameBuilder.cs +++ b/src/NzbDrone.Core/Organizer/FileNameBuilder.cs @@ -70,7 +70,7 @@ namespace NzbDrone.Core.Organizer RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex FileNameCleanupRegex = new Regex(@"([- ._])(\1)+", RegexOptions.Compiled); - private static readonly Regex TrimSeparatorsRegex = new Regex(@"[- ._]$", RegexOptions.Compiled); + private static readonly Regex TrimSeparatorsRegex = new Regex(@"[- ._]+$", RegexOptions.Compiled); private static readonly Regex ScenifyRemoveChars = new Regex(@"(?<=\s)(,|<|>|\/|\\|;|:|'|""|\||`|~|!|\?|@|$|%|^|\*|-|_|=){1}(?=\s)|('|:|\?|,)(?=(?:(?:s|m)\s)|\s|$)|(\(|\)|\[|\]|\{|\})", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex ScenifyReplaceChars = new Regex(@"[\/]", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -540,7 +540,7 @@ namespace NzbDrone.Core.Organizer int index = 1; foreach (var absoluteEpisodeFormat in absoluteEpisodeFormats) { - if (series.SeriesType != SeriesTypes.Anime) + if (series.SeriesType != SeriesTypes.Anime || episodes.Any(e => !e.AbsoluteEpisodeNumber.HasValue)) { pattern = pattern.Replace(absoluteEpisodeFormat.AbsoluteEpisodePattern, ""); continue;