AudioBookListResolver.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 { FullName = i.Path, IsDirectory = i.IsDirectory });
  27. var stackResult = new StackResolver(_options)
  28. .ResolveAudioBooks(metadata);
  29. foreach (var stack in stackResult)
  30. {
  31. var stackFiles = stack.Files.Select(i => audioBookResolver.Resolve(i, stack.IsDirectoryStack)).ToList();
  32. stackFiles.Sort();
  33. var info = new AudioBookInfo { Files = stackFiles, Name = stack.Name };
  34. yield return info;
  35. }
  36. }
  37. }
  38. }