AudioBookListResolver.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #pragma warning disable CS1591
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Emby.Naming.Common;
  5. using Emby.Naming.Video;
  6. using MediaBrowser.Model.IO;
  7. namespace Emby.Naming.AudioBook
  8. {
  9. public class AudioBookListResolver
  10. {
  11. private readonly NamingOptions _options;
  12. public AudioBookListResolver(NamingOptions options)
  13. {
  14. _options = options;
  15. }
  16. public IEnumerable<AudioBookInfo> Resolve(IEnumerable<FileSystemMetadata> files)
  17. {
  18. var audioBookResolver = new AudioBookResolver(_options);
  19. var audiobookFileInfos = files
  20. .Select(i => audioBookResolver.Resolve(i.FullName, i.IsDirectory))
  21. .Where(i => i != null)
  22. .ToList();
  23. // Filter out all extras, otherwise they could cause stacks to not be resolved
  24. // See the unit test TestStackedWithTrailer
  25. var metadata = audiobookFileInfos
  26. .Select(i => new FileSystemMetadata
  27. {
  28. FullName = i.Path,
  29. IsDirectory = i.IsDirectory
  30. });
  31. var stackResult = new StackResolver(_options)
  32. .ResolveAudioBooks(metadata);
  33. foreach (var stack in stackResult)
  34. {
  35. var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
  36. stackFiles.Sort();
  37. var info = new AudioBookInfo
  38. {
  39. Files = stackFiles,
  40. Name = stack.Name
  41. };
  42. yield return info;
  43. }
  44. }
  45. }
  46. }