EpisodeResolver.cs 2.4 KB

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