Fixed: Allow opening curly bracket as prefix in naming format

This commit is contained in:
nuxen 2025-06-03 15:27:31 +02:00 committed by GitHub
parent 22ef334de6
commit 187dd79b9c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 8 deletions

View file

@ -27,7 +27,7 @@ public void Setup()
.With(m => m.Title = "Movie Title") .With(m => m.Title = "Movie Title")
.Build(); .Build();
_movieFile = new MovieFile { Quality = new QualityModel(), ReleaseGroup = "RadarrTest" }; _movieFile = new MovieFile { Quality = new QualityModel(), ReleaseGroup = "RadarrTest", Edition = "Uncut" };
_namingConfig = NamingConfig.Default; _namingConfig = NamingConfig.Default;
_namingConfig.RenameMovies = true; _namingConfig.RenameMovies = true;
@ -47,15 +47,17 @@ public void Setup()
[Test] [Test]
public void should_add_edition_tag() public void should_add_edition_tag()
{ {
_movieFile.Edition = "Uncut";
_namingConfig.StandardMovieFormat = "{Movie Title} [{Edition Tags}]"; _namingConfig.StandardMovieFormat = "{Movie Title} [{Edition Tags}]";
Subject.BuildFileName(_movie, _movieFile) Subject.BuildFileName(_movie, _movieFile)
.Should().Be("Movie Title [Uncut]"); .Should().Be("Movie Title [Uncut]");
} }
[TestCase("{Movie Title} {Edition Tags}")]
[TestCase("{Movie Title} {{Edition Tags}}")]
[TestCase("{Movie Title} {edition-{Edition Tags}}")] [TestCase("{Movie Title} {edition-{Edition Tags}}")]
public void should_conditional_hide_edition_tags_in_plex_format(string movieFormat) [TestCase("{Movie Title} {{edition-{Edition Tags}}}")]
public void should_conditional_hide_edition_tags(string movieFormat)
{ {
_movieFile.Edition = ""; _movieFile.Edition = "";
_namingConfig.StandardMovieFormat = movieFormat; _namingConfig.StandardMovieFormat = movieFormat;
@ -64,6 +66,24 @@ public void should_conditional_hide_edition_tags_in_plex_format(string movieForm
.Should().Be("Movie Title"); .Should().Be("Movie Title");
} }
[TestCase("{Movie Title} {{Edition Tags}}")]
public void should_handle_edition_curly_brackets(string movieFormat)
{
_namingConfig.StandardMovieFormat = movieFormat;
Subject.BuildFileName(_movie, _movieFile)
.Should().Be("Movie Title {Uncut}");
}
[TestCase("{Movie Title} {{edition-{Edition Tags}}}")]
public void should_handle_edition_tag_curly_brackets(string movieFormat)
{
_namingConfig.StandardMovieFormat = movieFormat;
Subject.BuildFileName(_movie, _movieFile)
.Should().Be("Movie Title {{edition-Uncut}}");
}
[TestCase("1st anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [1st Anniversary Edition]")] [TestCase("1st anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [1st Anniversary Edition]")]
[TestCase("2nd Anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [2nd Anniversary Edition]")] [TestCase("2nd Anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [2nd Anniversary Edition]")]
[TestCase("3rd anniversary Edition", "{Movie Title} [{Edition Tags}]", "Movie Title [3rd Anniversary Edition]")] [TestCase("3rd anniversary Edition", "{Movie Title} [{Edition Tags}]", "Movie Title [3rd Anniversary Edition]")]

View file

@ -56,15 +56,36 @@ public void should_add_imdb_tag()
.Should().Be($"Movie Title {{imdb-{_movie.ImdbId}}}"); .Should().Be($"Movie Title {{imdb-{_movie.ImdbId}}}");
} }
[Test] [TestCase("{Movie Title} {imdb-{ImdbId}}")]
public void should_skip_imdb_tag_if_null() [TestCase("{Movie Title} {imdbid-{ImdbId}}")]
[TestCase("{Movie Title} {{imdb-{ImdbId}}}")]
[TestCase("{Movie Title} {{imdbid-{ImdbId}}}")]
public void should_skip_imdb_tag_if_null(string movieFormat)
{ {
_namingConfig.MovieFolderFormat = "{Movie Title} {imdb-{ImdbId}}"; _namingConfig.MovieFolderFormat = movieFormat;
_movie.ImdbId = null; _movie.ImdbId = null;
Subject.GetMovieFolder(_movie) Subject.GetMovieFolder(_movie)
.Should().Be($"Movie Title"); .Should().Be("Movie Title");
}
[TestCase("{Movie Title} {{imdb-{ImdbId}}}")]
public void should_handle_imdb_tag_curly_brackets(string movieFormat)
{
_namingConfig.MovieFolderFormat = movieFormat;
Subject.GetMovieFolder(_movie)
.Should().Be($"Movie Title {{{{imdb-{_movie.ImdbId}}}}}");
}
[TestCase("{Movie Title} {{tmdb-{TmdbId}}}")]
public void should_handle_tmdb_tag_curly_brackets(string movieFormat)
{
_namingConfig.MovieFolderFormat = movieFormat;
Subject.GetMovieFolder(_movie)
.Should().Be($"Movie Title {{{{tmdb-{_movie.TmdbId}}}}}");
} }
} }
} }

View file

@ -38,7 +38,7 @@ public class FileNameBuilder : IBuildFileNames
private readonly ICustomFormatCalculationService _formatCalculator; private readonly ICustomFormatCalculationService _formatCalculator;
private readonly Logger _logger; private readonly Logger _logger;
private static readonly Regex TitleRegex = new Regex(@"(?<tag>\{(?:imdb-|edition-))?\{(?<prefix>[- ._\[(]*)(?<token>(?:[a-z0-9]+)(?:(?<separator>[- ._]+)(?:[a-z0-9]+))?)(?::(?<customFormat>[ ,a-z0-9|+-]+(?<![- ])))?(?<suffix>[-} ._)\]]*)\}", private static readonly Regex TitleRegex = new Regex(@"(?<tag>\{(?<prefix>[-{ ._\[(]*)(?:imdb(?:id)?-|edition-))?\{(?<prefix>[-{ ._\[(]*)(?<token>(?:[a-z0-9]+)(?:(?<separator>[- ._]+)(?:[a-z0-9]+))?)(?::(?<customFormat>[ ,a-z0-9|+-]+(?<![- ])))?(?<suffix>[-} ._)\]]*)\}",
RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
public static readonly Regex ReleaseYearRegex = new Regex(@"\{[\[\(]?Release[- ._]Year[\]\)]?\}", RegexOptions.Compiled | RegexOptions.IgnoreCase); public static readonly Regex ReleaseYearRegex = new Regex(@"\{[\[\(]?Release[- ._]Year[\]\)]?\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);