mirror of
https://github.com/Radarr/Radarr
synced 2025-12-06 16:32:36 +01:00
Fixed: Improve edition naming for ordinals and certain keywords
Co-authored-by: Brandon Shelley <brandon@pacificaviator.co>
This commit is contained in:
parent
36f9ec4ea7
commit
470963921d
2 changed files with 107 additions and 5 deletions
|
|
@ -24,10 +24,10 @@ public void Setup()
|
||||||
{
|
{
|
||||||
_movie = Builder<Movie>
|
_movie = Builder<Movie>
|
||||||
.CreateNew()
|
.CreateNew()
|
||||||
.With(s => s.Title = "South Park")
|
.With(m => m.Title = "Movie Title")
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
_movieFile = new MovieFile { Quality = new QualityModel(), ReleaseGroup = "SonarrTest" };
|
_movieFile = new MovieFile { Quality = new QualityModel(), ReleaseGroup = "RadarrTest" };
|
||||||
|
|
||||||
_namingConfig = NamingConfig.Default;
|
_namingConfig = NamingConfig.Default;
|
||||||
_namingConfig.RenameMovies = true;
|
_namingConfig.RenameMovies = true;
|
||||||
|
|
@ -51,7 +51,7 @@ public void should_add_edition_tag()
|
||||||
_namingConfig.StandardMovieFormat = "{Movie Title} [{Edition Tags}]";
|
_namingConfig.StandardMovieFormat = "{Movie Title} [{Edition Tags}]";
|
||||||
|
|
||||||
Subject.BuildFileName(_movie, _movieFile)
|
Subject.BuildFileName(_movie, _movieFile)
|
||||||
.Should().Be("South Park [Uncut]");
|
.Should().Be("Movie Title [Uncut]");
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCase("{Movie Title} {edition-{Edition Tags}}")]
|
[TestCase("{Movie Title} {edition-{Edition Tags}}")]
|
||||||
|
|
@ -61,7 +61,99 @@ public void should_conditional_hide_edition_tags_in_plex_format(string movieForm
|
||||||
_namingConfig.StandardMovieFormat = movieFormat;
|
_namingConfig.StandardMovieFormat = movieFormat;
|
||||||
|
|
||||||
Subject.BuildFileName(_movie, _movieFile)
|
Subject.BuildFileName(_movie, _movieFile)
|
||||||
.Should().Be("South Park");
|
.Should().Be("Movie Title");
|
||||||
|
}
|
||||||
|
|
||||||
|
[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("3rd anniversary Edition", "{Movie Title} [{Edition Tags}]", "Movie Title [3rd Anniversary Edition]")]
|
||||||
|
[TestCase("4th anNiverSary eDitIOn", "{Movie Title} [{Edition Tags}]", "Movie Title [4th Anniversary Edition]")]
|
||||||
|
[TestCase("5th anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [5th Anniversary Edition]")]
|
||||||
|
[TestCase("6th anNiverSary EDITION", "{Movie Title} [{Edition Tags}]", "Movie Title [6th Anniversary Edition]")]
|
||||||
|
[TestCase("7TH anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [7th Anniversary Edition]")]
|
||||||
|
[TestCase("8Th anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [8th Anniversary Edition]")]
|
||||||
|
[TestCase("9tH anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [9th Anniversary Edition]")]
|
||||||
|
[TestCase("10th anniversary edition", "{Movie Title} [{edition tags}]", "Movie Title [10th anniversary edition]")]
|
||||||
|
[TestCase("10TH anniversary edition", "{Movie Title} [{edition tags}]", "Movie Title [10th anniversary edition]")]
|
||||||
|
[TestCase("10Th anniversary edition", "{Movie Title} [{edition tags}]", "Movie Title [10th anniversary edition]")]
|
||||||
|
[TestCase("10th anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [10th Anniversary Edition]")]
|
||||||
|
[TestCase("10TH anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [10th Anniversary Edition]")]
|
||||||
|
[TestCase("10Th anniversary edition", "{Movie Title} [{Edition Tags}]", "Movie Title [10th Anniversary Edition]")]
|
||||||
|
[TestCase("10th anniversary edition", "{Movie Title} [{EDITION TAGS}]", "Movie Title [10TH ANNIVERSARY EDITION]")]
|
||||||
|
[TestCase("10TH anniversary edition", "{Movie Title} [{EDITION TAGS}]", "Movie Title [10TH ANNIVERSARY EDITION]")]
|
||||||
|
[TestCase("10Th anniversary edition", "{Movie Title} [{EDITION TAGS}]", "Movie Title [10TH ANNIVERSARY EDITION]")]
|
||||||
|
public void should_always_lowercase_ordinals(string edition, string movieFormat, string expected)
|
||||||
|
{
|
||||||
|
_movieFile.Edition = edition;
|
||||||
|
_namingConfig.StandardMovieFormat = movieFormat;
|
||||||
|
|
||||||
|
Subject.BuildFileName(_movie, _movieFile)
|
||||||
|
.Should().Be(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase("imax", "{Movie Title} [{edition tags}]", "Movie Title [imax]")]
|
||||||
|
[TestCase("IMAX", "{Movie Title} [{edition tags}]", "Movie Title [imax]")]
|
||||||
|
[TestCase("Imax", "{Movie Title} [{edition tags}]", "Movie Title [imax]")]
|
||||||
|
[TestCase("imax", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("IMAX", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("Imax", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("imax", "{Movie Title} [{EDITION TAGS}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("IMAX", "{Movie Title} [{EDITION TAGS}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("Imax", "{Movie Title} [{EDITION TAGS}]", "Movie Title [IMAX]")]
|
||||||
|
[TestCase("imax edition", "{Movie Title} [{edition tags}]", "Movie Title [imax edition]")]
|
||||||
|
[TestCase("imax edition", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX Edition]")]
|
||||||
|
[TestCase("Imax edition", "{Movie Title} [{EDITION TAGS}]", "Movie Title [IMAX EDITION]")]
|
||||||
|
[TestCase("imax version", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX Version]")]
|
||||||
|
[TestCase("IMAX-edition", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX-Edition]")]
|
||||||
|
[TestCase("IMAX_edition", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX_Edition]")]
|
||||||
|
[TestCase("IMAX.eDiTioN", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX.Edition]")]
|
||||||
|
[TestCase("IMAX ed.", "{Movie Title} [{edition tags}]", "Movie Title [imax ed.]")]
|
||||||
|
[TestCase("IMAX ed.", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX Ed.]")]
|
||||||
|
[TestCase("Imax-ed.", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX-Ed.]")]
|
||||||
|
[TestCase("imax.Ed", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX.Ed]")]
|
||||||
|
[TestCase("Imax_ed", "{Movie Title} [{Edition Tags}]", "Movie Title [IMAX_Ed]")]
|
||||||
|
[TestCase("3d", "{Movie Title} [{edition tags}]", "Movie Title [3d]")]
|
||||||
|
[TestCase("3D", "{Movie Title} [{edition tags}]", "Movie Title [3d]")]
|
||||||
|
[TestCase("3d", "{Movie Title} [{Edition Tags}]", "Movie Title [3D]")]
|
||||||
|
[TestCase("3D", "{Movie Title} [{Edition Tags}]", "Movie Title [3D]")]
|
||||||
|
[TestCase("3d", "{Movie Title} [{EDITION TAGS}]", "Movie Title [3D]")]
|
||||||
|
[TestCase("3D", "{Movie Title} [{EDITION TAGS}]", "Movie Title [3D]")]
|
||||||
|
[TestCase("hdr", "{Movie Title} [{edition tags}]", "Movie Title [hdr]")]
|
||||||
|
[TestCase("HDR", "{Movie Title} [{edition tags}]", "Movie Title [hdr]")]
|
||||||
|
[TestCase("Hdr", "{Movie Title} [{edition tags}]", "Movie Title [hdr]")]
|
||||||
|
[TestCase("hdr", "{Movie Title} [{Edition Tags}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("HDR", "{Movie Title} [{Edition Tags}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("Hdr", "{Movie Title} [{Edition Tags}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("hdr", "{Movie Title} [{EDITION TAGS}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("HDR", "{Movie Title} [{EDITION TAGS}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("Hdr", "{Movie Title} [{EDITION TAGS}]", "Movie Title [HDR]")]
|
||||||
|
[TestCase("dv", "{Movie Title} [{edition tags}]", "Movie Title [dv]")]
|
||||||
|
[TestCase("DV", "{Movie Title} [{edition tags}]", "Movie Title [dv]")]
|
||||||
|
[TestCase("Dv", "{Movie Title} [{edition tags}]", "Movie Title [dv]")]
|
||||||
|
[TestCase("dv", "{Movie Title} [{Edition Tags}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("DV", "{Movie Title} [{Edition Tags}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("Dv", "{Movie Title} [{Edition Tags}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("dv", "{Movie Title} [{EDITION TAGS}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("DV", "{Movie Title} [{EDITION TAGS}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("Dv", "{Movie Title} [{EDITION TAGS}]", "Movie Title [DV]")]
|
||||||
|
[TestCase("sdr", "{Movie Title} [{edition tags}]", "Movie Title [sdr]")]
|
||||||
|
[TestCase("SDR", "{Movie Title} [{edition tags}]", "Movie Title [sdr]")]
|
||||||
|
[TestCase("Sdr", "{Movie Title} [{edition tags}]", "Movie Title [sdr]")]
|
||||||
|
[TestCase("sdr", "{Movie Title} [{Edition Tags}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("SDR", "{Movie Title} [{Edition Tags}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("Sdr", "{Movie Title} [{Edition Tags}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("sdr", "{Movie Title} [{EDITION TAGS}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("SDR", "{Movie Title} [{EDITION TAGS}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("Sdr", "{Movie Title} [{EDITION TAGS}]", "Movie Title [SDR]")]
|
||||||
|
[TestCase("THEATRICAL", "{Movie Title} [{Edition Tags}]", "Movie Title [Theatrical]")]
|
||||||
|
[TestCase("director's CUt", "{Movie Title} [{Edition Tags}]", "Movie Title [Director's Cut]")]
|
||||||
|
public void should_always_uppercase_special_strings(string edition, string movieFormat, string expected)
|
||||||
|
{
|
||||||
|
_movieFile.Edition = edition;
|
||||||
|
_namingConfig.StandardMovieFormat = movieFormat;
|
||||||
|
|
||||||
|
Subject.BuildFileName(_movie, _movieFile)
|
||||||
|
.Should().Be(expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -317,7 +317,7 @@ private void AddEditionTagsTokens(Dictionary<string, Func<TokenMatch, string>> t
|
||||||
{
|
{
|
||||||
if (movieFile.Edition.IsNotNullOrWhiteSpace())
|
if (movieFile.Edition.IsNotNullOrWhiteSpace())
|
||||||
{
|
{
|
||||||
tokenHandlers["{Edition Tags}"] = m => Truncate(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(movieFile.Edition.ToLower()), m.CustomFormat);
|
tokenHandlers["{Edition Tags}"] = m => Truncate(GetEditionToken(movieFile), m.CustomFormat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -533,6 +533,16 @@ private string GetLanguagesToken(List<string> mediaInfoLanguages, string filter,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetEditionToken(MovieFile movieFile)
|
||||||
|
{
|
||||||
|
var edition = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(movieFile.Edition.ToLowerInvariant());
|
||||||
|
|
||||||
|
edition = Regex.Replace(edition, @"((?:\b|_)\d{1,3}(?:st|th|rd|nd)(?:\b|_))", match => match.Groups[1].Value.ToLowerInvariant(), RegexOptions.IgnoreCase);
|
||||||
|
edition = Regex.Replace(edition, @"((?:\b|_)(?:IMAX|3D|SDR|HDR|DV)(?:\b|_))", match => match.Groups[1].Value.ToUpperInvariant(), RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
return edition;
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateMediaInfoIfNeeded(string pattern, MovieFile movieFile, Movie movie)
|
private void UpdateMediaInfoIfNeeded(string pattern, MovieFile movieFile, Movie movie)
|
||||||
{
|
{
|
||||||
if (movie.Path.IsNullOrWhiteSpace())
|
if (movie.Path.IsNullOrWhiteSpace())
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue