mirror of
https://github.com/lidarr/Lidarr
synced 2025-02-26 07:42:49 +00:00
parent
c7ef370060
commit
8ad38fe3af
4 changed files with 22 additions and 6 deletions
|
@ -123,7 +123,9 @@ class NamingModal extends Component {
|
||||||
|
|
||||||
{ token: '{Album CleanTitle}', example: 'Album Title' },
|
{ token: '{Album CleanTitle}', example: 'Album Title' },
|
||||||
{ token: '{Album.CleanTitle}', example: 'Album.Title' },
|
{ token: '{Album.CleanTitle}', example: 'Album.Title' },
|
||||||
{ token: '{Album_CleanTitle}', example: 'Album_Title' }
|
{ token: '{Album_CleanTitle}', example: 'Album_Title' },
|
||||||
|
|
||||||
|
{ token: '{Album Type}', example: 'Album Type' }
|
||||||
];
|
];
|
||||||
|
|
||||||
const mediumTokens = [
|
const mediumTokens = [
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class FileNameBuilder : IBuildFileNames
|
||||||
private static readonly Regex TitleRegex = new Regex(@"\{(?<prefix>[- ._\[(]*)(?<token>(?:[a-z0-9]+)(?:(?<separator>[- ._]+)(?:[a-z0-9]+))?)(?::(?<customFormat>[a-z0-9]+))?(?<suffix>[- ._)\]]*)\}",
|
private static readonly Regex TitleRegex = new Regex(@"\{(?<prefix>[- ._\[(]*)(?<token>(?:[a-z0-9]+)(?:(?<separator>[- ._]+)(?:[a-z0-9]+))?)(?::(?<customFormat>[a-z0-9]+))?(?<suffix>[- ._)\]]*)\}",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
private static readonly Regex TrackRegex = new Regex(@"(?<track>\{track(?:\:0+)?})",
|
public static readonly Regex TrackRegex = new Regex(@"(?<track>\{track(?:\:0+)?})",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
private static readonly Regex MediumRegex = new Regex(@"(?<medium>\{medium(?:\:0+)?})",
|
private static readonly Regex MediumRegex = new Regex(@"(?<medium>\{medium(?:\:0+)?})",
|
||||||
|
@ -45,7 +45,7 @@ public class FileNameBuilder : IBuildFileNames
|
||||||
public static readonly Regex SeasonEpisodePatternRegex = new Regex(@"(?<separator>(?<=})[- ._]+?)?(?<seasonEpisode>s?{season(?:\:0+)?}(?<episodeSeparator>[- ._]?[ex])(?<episode>{episode(?:\:0+)?}))(?<separator>[- ._]+?(?={))?",
|
public static readonly Regex SeasonEpisodePatternRegex = new Regex(@"(?<separator>(?<=})[- ._]+?)?(?<seasonEpisode>s?{season(?:\:0+)?}(?<episodeSeparator>[- ._]?[ex])(?<episode>{episode(?:\:0+)?}))(?<separator>[- ._]+?(?={))?",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
public static readonly Regex AirDateRegex = new Regex(@"\{Air(\s|\W|_)Date\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
public static readonly Regex ReleaseDateRegex = new Regex(@"\{Release(\s|\W|_)Year\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
public static readonly Regex ArtistNameRegex = new Regex(@"(?<token>\{(?:Artist)(?<separator>[- ._])(Clean)?Name(The)?\})",
|
public static readonly Regex ArtistNameRegex = new Regex(@"(?<token>\{(?:Artist)(?<separator>[- ._])(Clean)?Name(The)?\})",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
@ -53,6 +53,9 @@ public class FileNameBuilder : IBuildFileNames
|
||||||
public static readonly Regex AlbumTitleRegex = new Regex(@"(?<token>\{(?:Album)(?<separator>[- ._])(Clean)?Title(The)?\})",
|
public static readonly Regex AlbumTitleRegex = new Regex(@"(?<token>\{(?:Album)(?<separator>[- ._])(Clean)?Title(The)?\})",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
public static readonly Regex TrackTitleRegex = new Regex(@"(?<token>\{(?:Track)(?<separator>[- ._])(Clean)?Title(The)?\})",
|
||||||
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
private static readonly Regex FileNameCleanupRegex = new Regex(@"([- ._])(\1)+", RegexOptions.Compiled);
|
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);
|
||||||
|
|
||||||
|
@ -265,6 +268,7 @@ private void AddAlbumTokens(Dictionary<string, Func<TokenMatch, string>> tokenHa
|
||||||
tokenHandlers["{Album Title}"] = m => album.Title;
|
tokenHandlers["{Album Title}"] = m => album.Title;
|
||||||
tokenHandlers["{Album CleanTitle}"] = m => CleanTitle(album.Title);
|
tokenHandlers["{Album CleanTitle}"] = m => CleanTitle(album.Title);
|
||||||
tokenHandlers["{Album TitleThe}"] = m => TitleThe(album.Title);
|
tokenHandlers["{Album TitleThe}"] = m => TitleThe(album.Title);
|
||||||
|
tokenHandlers["{Album Type}"] = m => album.AlbumType;
|
||||||
if (album.ReleaseDate.HasValue)
|
if (album.ReleaseDate.HasValue)
|
||||||
{
|
{
|
||||||
tokenHandlers["{Release Year}"] = m => album.ReleaseDate.Value.Year.ToString();
|
tokenHandlers["{Release Year}"] = m => album.ReleaseDate.Value.Year.ToString();
|
||||||
|
|
|
@ -37,6 +37,7 @@ public FileNameSampleService(IBuildFileNames buildFileNames)
|
||||||
{
|
{
|
||||||
Title = "The Album Title",
|
Title = "The Album Title",
|
||||||
ReleaseDate = System.DateTime.Today,
|
ReleaseDate = System.DateTime.Today,
|
||||||
|
AlbumType = "Album",
|
||||||
Media = new List<Medium>
|
Media = new List<Medium>
|
||||||
{
|
{
|
||||||
new Medium
|
new Medium
|
||||||
|
|
|
@ -24,22 +24,31 @@ public static IRuleBuilderOptions<T, string> ValidArtistFolderFormat<T>(this IRu
|
||||||
public static IRuleBuilderOptions<T, string> ValidAlbumFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
public static IRuleBuilderOptions<T, string> ValidAlbumFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||||
{
|
{
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.AlbumTitleRegex)).WithMessage("Must contain Album title");
|
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.AlbumTitleRegex)).WithMessage("Must contain Album title")
|
||||||
|
.SetValidator(new RegularExpressionValidator(FileNameBuilder.ReleaseDateRegex)).WithMessage("Must contain Release year");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ValidStandardTrackFormatValidator : PropertyValidator
|
public class ValidStandardTrackFormatValidator : PropertyValidator
|
||||||
{
|
{
|
||||||
public ValidStandardTrackFormatValidator()
|
public ValidStandardTrackFormatValidator()
|
||||||
: base("Must contain Album Title and Track numbers OR Original Title")
|
: base("Must contain Track Title and Track numbers OR Original Title")
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
protected override bool IsValid(PropertyValidatorContext context)
|
||||||
{
|
{
|
||||||
|
var value = context.PropertyValue as string;
|
||||||
|
|
||||||
return true; //TODO Add Logic here
|
if (!(FileNameBuilder.TrackTitleRegex.IsMatch(value) &&
|
||||||
|
FileNameBuilder.TrackRegex.IsMatch(value)) &&
|
||||||
|
!FileNameValidation.OriginalTokenRegex.IsMatch(value))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue