private ExtraResult GetExtraInfo(string path, ExtraRule rule) { var result = new ExtraResult(); if (rule.MediaType == MediaType.Audio) { if (!new AudioFileParser(_options).IsAudioFile(path)) { return(result); } } else if (rule.MediaType == MediaType.Video) { if (!new VideoResolver(_options).IsVideoFile(path)) { return(result); } } else { return(result); } if (rule.RuleType == ExtraRuleType.Filename) { var filename = Path.GetFileNameWithoutExtension(path); if (string.Equals(filename, rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.Suffix) { var filename = Path.GetFileNameWithoutExtension(path); if (filename.IndexOf(rule.Token, StringComparison.OrdinalIgnoreCase) > 0) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.Regex) { var filename = Path.GetFileName(path); var regex = _regexProvider.GetRegex(rule.Token, RegexOptions.IgnoreCase); if (regex.IsMatch(filename)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } return(result); }
/// <summary> /// Attempts to resolve if file is extra. /// </summary> /// <param name="path">Path to file.</param> /// <param name="namingOptions">The naming options.</param> /// <returns>Returns <see cref="ExtraResult"/> object.</returns> public static ExtraResult GetExtraInfo(string path, NamingOptions namingOptions) { var result = new ExtraResult(); for (var i = 0; i < namingOptions.VideoExtraRules.Length; i++) { var rule = namingOptions.VideoExtraRules[i]; if ((rule.MediaType == MediaType.Audio && !AudioFileParser.IsAudioFile(path, namingOptions)) || (rule.MediaType == MediaType.Video && !VideoResolver.IsVideoFile(path, namingOptions))) { continue; } var pathSpan = path.AsSpan(); if (rule.RuleType == ExtraRuleType.Filename) { var filename = Path.GetFileNameWithoutExtension(pathSpan); if (filename.Equals(rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.Suffix) { // 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); 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)); if (directoryName.Equals(rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } if (result.ExtraType != null) { return(result); } } return(result); }
/// <summary> /// Attempts to resolve if file is extra. /// </summary> /// <param name="path">Path to file.</param> /// <returns>Returns <see cref="ExtraResult"/> object.</returns> public ExtraResult GetExtraInfo(string path) { var result = new ExtraResult(); for (var i = 0; i < _options.VideoExtraRules.Length; i++) { var rule = _options.VideoExtraRules[i]; if (rule.MediaType == MediaType.Audio) { if (!AudioFileParser.IsAudioFile(path, _options)) { continue; } } else if (rule.MediaType == MediaType.Video) { if (!new VideoResolver(_options).IsVideoFile(path)) { continue; } } var pathSpan = path.AsSpan(); if (rule.RuleType == ExtraRuleType.Filename) { var filename = Path.GetFileNameWithoutExtension(pathSpan); if (filename.Equals(rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.Suffix) { var filename = Path.GetFileNameWithoutExtension(pathSpan); if (filename.Contains(rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.Regex) { var filename = Path.GetFileName(path); var regex = new Regex(rule.Token, RegexOptions.IgnoreCase); if (regex.IsMatch(filename)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } else if (rule.RuleType == ExtraRuleType.DirectoryName) { var directoryName = Path.GetFileName(Path.GetDirectoryName(pathSpan)); if (directoryName.Equals(rule.Token, StringComparison.OrdinalIgnoreCase)) { result.ExtraType = rule.ExtraType; result.Rule = rule; } } if (result.ExtraType != null) { return(result); } } return(result); }