AudioBookListResolver.cs 1.7 KB

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