AudioBookResolver.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #pragma warning disable CS1591
  2. #pragma warning disable SA1600
  3. using System;
  4. using System.IO;
  5. using System.Linq;
  6. using Emby.Naming.Common;
  7. namespace Emby.Naming.AudioBook
  8. {
  9. public class AudioBookResolver
  10. {
  11. private readonly NamingOptions _options;
  12. public AudioBookResolver(NamingOptions options)
  13. {
  14. _options = options;
  15. }
  16. public AudioBookFileInfo ParseFile(string path)
  17. {
  18. return Resolve(path, false);
  19. }
  20. public AudioBookFileInfo ParseDirectory(string path)
  21. {
  22. return Resolve(path, true);
  23. }
  24. public AudioBookFileInfo Resolve(string path, bool isDirectory = false)
  25. {
  26. if (string.IsNullOrEmpty(path))
  27. {
  28. throw new ArgumentNullException(nameof(path));
  29. }
  30. // TODO
  31. if (isDirectory)
  32. {
  33. return null;
  34. }
  35. var extension = Path.GetExtension(path);
  36. // Check supported extensions
  37. if (!_options.AudioFileExtensions.Contains(extension, StringComparer.OrdinalIgnoreCase))
  38. {
  39. return null;
  40. }
  41. var container = extension.TrimStart('.');
  42. var parsingResult = new AudioBookFilePathParser(_options).Parse(path);
  43. return new AudioBookFileInfo
  44. {
  45. Path = path,
  46. Container = container,
  47. PartNumber = parsingResult.PartNumber,
  48. ChapterNumber = parsingResult.ChapterNumber,
  49. IsDirectory = isDirectory
  50. };
  51. }
  52. }
  53. }