ExtraResolver.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma warning disable CS1591
  2. #pragma warning disable SA1600
  3. using System;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text.RegularExpressions;
  7. using Emby.Naming.Audio;
  8. using Emby.Naming.Common;
  9. namespace Emby.Naming.Video
  10. {
  11. public class ExtraResolver
  12. {
  13. private readonly NamingOptions _options;
  14. public ExtraResolver(NamingOptions options)
  15. {
  16. _options = options;
  17. }
  18. public ExtraResult GetExtraInfo(string path)
  19. {
  20. return _options.VideoExtraRules
  21. .Select(i => GetExtraInfo(path, i))
  22. .FirstOrDefault(i => i.ExtraType != null) ?? new ExtraResult();
  23. }
  24. private ExtraResult GetExtraInfo(string path, ExtraRule rule)
  25. {
  26. var result = new ExtraResult();
  27. if (rule.MediaType == MediaType.Audio)
  28. {
  29. if (!new AudioFileParser(_options).IsAudioFile(path))
  30. {
  31. return result;
  32. }
  33. }
  34. else if (rule.MediaType == MediaType.Video)
  35. {
  36. if (!new VideoResolver(_options).IsVideoFile(path))
  37. {
  38. return result;
  39. }
  40. }
  41. else
  42. {
  43. return result;
  44. }
  45. if (rule.RuleType == ExtraRuleType.Filename)
  46. {
  47. var filename = Path.GetFileNameWithoutExtension(path);
  48. if (string.Equals(filename, rule.Token, StringComparison.OrdinalIgnoreCase))
  49. {
  50. result.ExtraType = rule.ExtraType;
  51. result.Rule = rule;
  52. }
  53. }
  54. else if (rule.RuleType == ExtraRuleType.Suffix)
  55. {
  56. var filename = Path.GetFileNameWithoutExtension(path);
  57. if (filename.IndexOf(rule.Token, StringComparison.OrdinalIgnoreCase) > 0)
  58. {
  59. result.ExtraType = rule.ExtraType;
  60. result.Rule = rule;
  61. }
  62. }
  63. else if (rule.RuleType == ExtraRuleType.Regex)
  64. {
  65. var filename = Path.GetFileName(path);
  66. var regex = new Regex(rule.Token, RegexOptions.IgnoreCase);
  67. if (regex.IsMatch(filename))
  68. {
  69. result.ExtraType = rule.ExtraType;
  70. result.Rule = rule;
  71. }
  72. }
  73. return result;
  74. }
  75. }
  76. }