EpisodeResolver.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using Emby.Naming.Common;
  5. using Emby.Naming.Video;
  6. namespace Emby.Naming.TV
  7. {
  8. public class EpisodeResolver
  9. {
  10. private readonly NamingOptions _options;
  11. public EpisodeResolver(NamingOptions options)
  12. {
  13. _options = options;
  14. }
  15. public EpisodeInfo Resolve(string path, bool IsDirectory, bool? isNamed = null, bool? isOptimistic = null, bool? supportsAbsoluteNumbers = null, bool fillExtendedInfo = true)
  16. {
  17. if (string.IsNullOrEmpty(path))
  18. {
  19. throw new ArgumentNullException(nameof(path));
  20. }
  21. bool isStub = false;
  22. string container = null;
  23. string stubType = null;
  24. if (!IsDirectory)
  25. {
  26. var extension = Path.GetExtension(path);
  27. // Check supported extensions
  28. if (!_options.VideoFileExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase))
  29. {
  30. var stubResult = StubResolver.ResolveFile(path, _options);
  31. isStub = stubResult.IsStub;
  32. // It's not supported. Check stub extensions
  33. if (!isStub)
  34. {
  35. return null;
  36. }
  37. stubType = stubResult.StubType;
  38. }
  39. container = extension.TrimStart('.');
  40. }
  41. var flags = new FlagParser(_options).GetFlags(path);
  42. var format3DResult = new Format3DParser(_options).Parse(flags);
  43. var parsingResult = new EpisodePathParser(_options)
  44. .Parse(path, IsDirectory, isNamed, isOptimistic, supportsAbsoluteNumbers, fillExtendedInfo);
  45. return new EpisodeInfo
  46. {
  47. Path = path,
  48. Container = container,
  49. IsStub = isStub,
  50. EndingEpsiodeNumber = parsingResult.EndingEpsiodeNumber,
  51. EpisodeNumber = parsingResult.EpisodeNumber,
  52. SeasonNumber = parsingResult.SeasonNumber,
  53. SeriesName = parsingResult.SeriesName,
  54. StubType = stubType,
  55. Is3D = format3DResult.Is3D,
  56. Format3D = format3DResult.Format3D,
  57. IsByDate = parsingResult.IsByDate,
  58. Day = parsingResult.Day,
  59. Month = parsingResult.Month,
  60. Year = parsingResult.Year
  61. };
  62. }
  63. }
  64. }