diff options
Diffstat (limited to 'Emby.Naming')
| -rw-r--r-- | Emby.Naming/Common/NamingOptions.cs | 31 | ||||
| -rw-r--r-- | Emby.Naming/ExternalFiles/ExternalPathParser.cs | 8 | ||||
| -rw-r--r-- | Emby.Naming/Video/ExtraRuleResolver.cs | 78 |
3 files changed, 50 insertions, 67 deletions
diff --git a/Emby.Naming/Common/NamingOptions.cs b/Emby.Naming/Common/NamingOptions.cs index dbb848603..1c518f0cc 100644 --- a/Emby.Naming/Common/NamingOptions.cs +++ b/Emby.Naming/Common/NamingOptions.cs @@ -188,7 +188,8 @@ namespace Emby.Naming.Common "disk", "vol", "volume", - "part" + "part", + "act" }; ArtistSubfolders = new[] @@ -572,6 +573,18 @@ namespace Emby.Naming.Common MediaType.Video), new ExtraRule( + ExtraType.Sample, + ExtraRuleType.Filename, + "sample", + MediaType.Video), + + new ExtraRule( + ExtraType.ThemeSong, + ExtraRuleType.Filename, + "theme", + MediaType.Audio), + + new ExtraRule( ExtraType.Trailer, ExtraRuleType.Suffix, "-trailer", @@ -592,13 +605,7 @@ namespace Emby.Naming.Common new ExtraRule( ExtraType.Trailer, ExtraRuleType.Suffix, - " trailer", - MediaType.Video), - - new ExtraRule( - ExtraType.Sample, - ExtraRuleType.Filename, - "sample", + "- trailer", MediaType.Video), new ExtraRule( @@ -622,16 +629,10 @@ namespace Emby.Naming.Common new ExtraRule( ExtraType.Sample, ExtraRuleType.Suffix, - " sample", + "- sample", MediaType.Video), new ExtraRule( - ExtraType.ThemeSong, - ExtraRuleType.Filename, - "theme", - MediaType.Audio), - - new ExtraRule( ExtraType.Scene, ExtraRuleType.Suffix, "-scene", diff --git a/Emby.Naming/ExternalFiles/ExternalPathParser.cs b/Emby.Naming/ExternalFiles/ExternalPathParser.cs index 7a01b02f3..3461b3c0d 100644 --- a/Emby.Naming/ExternalFiles/ExternalPathParser.cs +++ b/Emby.Naming/ExternalFiles/ExternalPathParser.cs @@ -97,14 +97,18 @@ namespace Emby.Naming.ExternalFiles if (culture is not null && pathInfo.Language is null) { - pathInfo.Language = culture.ThreeLetterISOLanguageName; + pathInfo.Language = culture.Name.Contains('-', StringComparison.OrdinalIgnoreCase) + ? culture.Name + : culture.ThreeLetterISOLanguageName; extraString = extraString.Replace(currentSlice, string.Empty, StringComparison.OrdinalIgnoreCase); } else if (culture is not null && pathInfo.Language == "hin") { // Hindi language code "hi" collides with a hearing impaired flag - use as Hindi only if no other language is set pathInfo.IsHearingImpaired = true; - pathInfo.Language = culture.ThreeLetterISOLanguageName; + pathInfo.Language = culture.Name.Contains('-', StringComparison.OrdinalIgnoreCase) + ? culture.Name + : culture.ThreeLetterISOLanguageName; extraString = extraString.Replace(currentSlice, string.Empty, StringComparison.OrdinalIgnoreCase); } else if (_namingOptions.MediaHearingImpairedFlags.Any(s => currentSliceWithoutSeparator.Equals(s, StringComparison.OrdinalIgnoreCase))) diff --git a/Emby.Naming/Video/ExtraRuleResolver.cs b/Emby.Naming/Video/ExtraRuleResolver.cs index 528906589..2e0caa612 100644 --- a/Emby.Naming/Video/ExtraRuleResolver.cs +++ b/Emby.Naming/Video/ExtraRuleResolver.cs @@ -22,67 +22,45 @@ namespace Emby.Naming.Video /// <returns>Returns <see cref="ExtraResult"/> object.</returns> public static ExtraResult GetExtraInfo(string path, NamingOptions namingOptions, string? libraryRoot = "") { - var result = new ExtraResult(); + ExtraResult result = new ExtraResult(); - for (var i = 0; i < namingOptions.VideoExtraRules.Length; i++) + bool isAudioFile = AudioFileParser.IsAudioFile(path, namingOptions); + bool isVideoFile = VideoResolver.IsVideoFile(path, namingOptions); + + ReadOnlySpan<char> pathSpan = path.AsSpan(); + ReadOnlySpan<char> fileName = Path.GetFileName(pathSpan); + ReadOnlySpan<char> fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathSpan); + // Trim the digits from the end of the filename so we can recognize things like -trailer2 + ReadOnlySpan<char> trimmedFileNameWithoutExtension = fileNameWithoutExtension.TrimEnd(_digits); + ReadOnlySpan<char> directoryName = Path.GetFileName(Path.GetDirectoryName(pathSpan)); + string fullDirectory = Path.GetDirectoryName(pathSpan).ToString(); + + foreach (ExtraRule rule in namingOptions.VideoExtraRules) { - var rule = namingOptions.VideoExtraRules[i]; - if ((rule.MediaType == MediaType.Audio && !AudioFileParser.IsAudioFile(path, namingOptions)) - || (rule.MediaType == MediaType.Video && !VideoResolver.IsVideoFile(path, namingOptions))) + if ((rule.MediaType == MediaType.Audio && !isAudioFile) + || (rule.MediaType == MediaType.Video && !isVideoFile)) { continue; } - var pathSpan = path.AsSpan(); - if (rule.RuleType == ExtraRuleType.Filename) + bool isMatch = rule.RuleType switch { - var filename = Path.GetFileNameWithoutExtension(pathSpan); + ExtraRuleType.Filename => fileNameWithoutExtension.Equals(rule.Token, StringComparison.OrdinalIgnoreCase), + ExtraRuleType.Suffix => trimmedFileNameWithoutExtension.EndsWith(rule.Token, StringComparison.OrdinalIgnoreCase), + ExtraRuleType.Regex => Regex.IsMatch(fileName, rule.Token, RegexOptions.IgnoreCase | RegexOptions.Compiled), + ExtraRuleType.DirectoryName => directoryName.Equals(rule.Token, StringComparison.OrdinalIgnoreCase) + && !string.Equals(fullDirectory, libraryRoot, StringComparison.OrdinalIgnoreCase), + _ => false, + }; - if (filename.Equals(rule.Token, StringComparison.OrdinalIgnoreCase)) - { - result.ExtraType = rule.ExtraType; - result.Rule = rule; - } - } - else if (rule.RuleType == ExtraRuleType.Suffix) + if (!isMatch) { - // Trim the digits from the end of the filename so we can recognize things like -trailer2 - var filename = Path.GetFileNameWithoutExtension(pathSpan).TrimEnd(_digits); - - if (filename.EndsWith(rule.Token, StringComparison.OrdinalIgnoreCase)) - { - result.ExtraType = rule.ExtraType; - result.Rule = rule; - } - } - else if (rule.RuleType == ExtraRuleType.Regex) - { - var filename = Path.GetFileName(path.AsSpan()); - - var isMatch = Regex.IsMatch(filename, rule.Token, RegexOptions.IgnoreCase | RegexOptions.Compiled); - - if (isMatch) - { - result.ExtraType = rule.ExtraType; - result.Rule = rule; - } - } - else if (rule.RuleType == ExtraRuleType.DirectoryName) - { - var directoryName = Path.GetFileName(Path.GetDirectoryName(pathSpan)); - string fullDirectory = Path.GetDirectoryName(pathSpan).ToString(); - if (directoryName.Equals(rule.Token, StringComparison.OrdinalIgnoreCase) - && !string.Equals(fullDirectory, libraryRoot, StringComparison.OrdinalIgnoreCase)) - { - result.ExtraType = rule.ExtraType; - result.Rule = rule; - } + continue; } - if (result.ExtraType is not null) - { - return result; - } + result.ExtraType = rule.ExtraType; + result.Rule = rule; + return result; } return result; |
