ExtraResolver.cs 2.4 KB

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