mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-31 12:10:19 -07:00
Cleanup FileNameBuilder
This commit is contained in:
parent
08b95e905e
commit
0ea3b71bae
2 changed files with 0 additions and 119 deletions
|
@ -42,20 +42,11 @@ namespace NzbDrone.Core.Organizer
|
||||||
private static readonly Regex MediumRegex = new Regex(@"(?<medium>\{medium(?:\:0+)?})",
|
private static readonly Regex MediumRegex = new Regex(@"(?<medium>\{medium(?:\:0+)?})",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
private static readonly Regex AbsoluteEpisodeRegex = new Regex(@"(?<absolute>\{absolute(?:\:0+)?})",
|
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
||||||
|
|
||||||
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 AbsoluteEpisodePatternRegex = new Regex(@"(?<separator>(?<=})[- ._]+?)?(?<absolute>{absolute(?:\:0+)?})(?<separator>[- ._]+?(?={))?",
|
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
||||||
|
|
||||||
public static readonly Regex AirDateRegex = new Regex(@"\{Air(\s|\W|_)Date\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
public static readonly Regex AirDateRegex = new Regex(@"\{Air(\s|\W|_)Date\}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
public static readonly Regex SeriesTitleRegex = new Regex(@"(?<token>\{(?:Series)(?<separator>[- ._])(Clean)?Title\})",
|
|
||||||
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);
|
||||||
|
|
||||||
|
@ -479,16 +470,6 @@ namespace NzbDrone.Core.Organizer
|
||||||
}).ToArray());
|
}).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbsoluteTrackFormat[] GetAbsoluteFormat(string pattern)
|
|
||||||
{
|
|
||||||
return _absoluteTrackFormatCache.Get(pattern, () => AbsoluteEpisodePatternRegex.Matches(pattern).OfType<Match>()
|
|
||||||
.Select(match => new AbsoluteTrackFormat
|
|
||||||
{
|
|
||||||
Separator = match.Groups["separator"].Value.IsNotNullOrWhiteSpace() ? match.Groups["separator"].Value : "-",
|
|
||||||
AbsoluteTrackPattern = match.Groups["absolute"].Value
|
|
||||||
}).ToArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetTrackTitle(List<Track> tracks, string separator)
|
private string GetTrackTitle(List<Track> tracks, string separator)
|
||||||
{
|
{
|
||||||
separator = string.Format(" {0} ", separator.Trim());
|
separator = string.Format(" {0} ", separator.Trim());
|
||||||
|
|
|
@ -6,47 +6,15 @@ namespace NzbDrone.Core.Organizer
|
||||||
{
|
{
|
||||||
public static class FileNameValidation
|
public static class FileNameValidation
|
||||||
{
|
{
|
||||||
private static readonly Regex SeasonFolderRegex = new Regex(@"(\{season(\:\d+)?\})",
|
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
|
||||||
|
|
||||||
internal static readonly Regex OriginalTokenRegex = new Regex(@"(\{original[- ._](?:title|filename)\})",
|
internal static readonly Regex OriginalTokenRegex = new Regex(@"(\{original[- ._](?:title|filename)\})",
|
||||||
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidEpisodeFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new ValidStandardEpisodeFormatValidator());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidTrackFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
public static IRuleBuilderOptions<T, string> ValidTrackFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||||
{
|
{
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||||
return ruleBuilder.SetValidator(new ValidStandardTrackFormatValidator());
|
return ruleBuilder.SetValidator(new ValidStandardTrackFormatValidator());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidDailyEpisodeFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new ValidDailyEpisodeFormatValidator());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidAnimeEpisodeFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new ValidAnimeEpisodeFormatValidator());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidSeriesFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(FileNameBuilder.SeriesTitleRegex)).WithMessage("Must contain series title");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidSeasonFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
|
||||||
{
|
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
|
||||||
return ruleBuilder.SetValidator(new RegularExpressionValidator(SeasonFolderRegex)).WithMessage("Must contain season number");
|
|
||||||
}
|
|
||||||
public static IRuleBuilderOptions<T, string> ValidArtistFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
public static IRuleBuilderOptions<T, string> ValidArtistFolderFormat<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||||
{
|
{
|
||||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||||
|
@ -60,28 +28,6 @@ namespace NzbDrone.Core.Organizer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ValidStandardEpisodeFormatValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
public ValidStandardEpisodeFormatValidator()
|
|
||||||
: base("Must contain season and episode numbers OR Original Title")
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
var value = context.PropertyValue as string;
|
|
||||||
|
|
||||||
if (!FileNameBuilder.SeasonEpisodePatternRegex.IsMatch(value) &&
|
|
||||||
!FileNameValidation.OriginalTokenRegex.IsMatch(value))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ValidStandardTrackFormatValidator : PropertyValidator
|
public class ValidStandardTrackFormatValidator : PropertyValidator
|
||||||
{
|
{
|
||||||
public ValidStandardTrackFormatValidator()
|
public ValidStandardTrackFormatValidator()
|
||||||
|
@ -96,50 +42,4 @@ namespace NzbDrone.Core.Organizer
|
||||||
return true; //TODO Add Logic here
|
return true; //TODO Add Logic here
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ValidDailyEpisodeFormatValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
public ValidDailyEpisodeFormatValidator()
|
|
||||||
: base("Must contain Air Date OR Season and Episode OR Original Title")
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
var value = context.PropertyValue as string;
|
|
||||||
|
|
||||||
if (!FileNameBuilder.SeasonEpisodePatternRegex.IsMatch(value) &&
|
|
||||||
!FileNameBuilder.AirDateRegex.IsMatch(value) &&
|
|
||||||
!FileNameValidation.OriginalTokenRegex.IsMatch(value))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ValidAnimeEpisodeFormatValidator : PropertyValidator
|
|
||||||
{
|
|
||||||
public ValidAnimeEpisodeFormatValidator()
|
|
||||||
: base("Must contain Absolute Episode number OR Season and Episode OR Original Title")
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool IsValid(PropertyValidatorContext context)
|
|
||||||
{
|
|
||||||
var value = context.PropertyValue as string;
|
|
||||||
|
|
||||||
if (!FileNameBuilder.SeasonEpisodePatternRegex.IsMatch(value) &&
|
|
||||||
!FileNameBuilder.AbsoluteEpisodePatternRegex.IsMatch(value) &&
|
|
||||||
!FileNameValidation.OriginalTokenRegex.IsMatch(value))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue