AudioResolver.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using MediaBrowser.Controller.Library;
  2. using MediaBrowser.Controller.Resolvers;
  3. using MediaBrowser.Model.Entities;
  4. using System;
  5. using MediaBrowser.Controller.Entities;
  6. using System.IO;
  7. namespace Emby.Server.Implementations.Library.Resolvers.Audio
  8. {
  9. /// <summary>
  10. /// Class AudioResolver
  11. /// </summary>
  12. public class AudioResolver : ItemResolver<MediaBrowser.Controller.Entities.Audio.Audio>
  13. {
  14. private readonly ILibraryManager _libraryManager;
  15. public AudioResolver(ILibraryManager libraryManager)
  16. {
  17. _libraryManager = libraryManager;
  18. }
  19. /// <summary>
  20. /// Gets the priority.
  21. /// </summary>
  22. /// <value>The priority.</value>
  23. public override ResolverPriority Priority
  24. {
  25. get { return ResolverPriority.Last; }
  26. }
  27. /// <summary>
  28. /// Resolves the specified args.
  29. /// </summary>
  30. /// <param name="args">The args.</param>
  31. /// <returns>Entities.Audio.Audio.</returns>
  32. protected override MediaBrowser.Controller.Entities.Audio.Audio Resolve(ItemResolveArgs args)
  33. {
  34. // Return audio if the path is a file and has a matching extension
  35. if (!args.IsDirectory)
  36. {
  37. var libraryOptions = args.GetLibraryOptions();
  38. if (_libraryManager.IsAudioFile(args.Path, libraryOptions))
  39. {
  40. if (string.Equals(Path.GetExtension(args.Path), ".cue", StringComparison.OrdinalIgnoreCase))
  41. {
  42. // if audio file exists of same name, return null
  43. return null;
  44. }
  45. var collectionType = args.GetCollectionType();
  46. var isMixed = string.IsNullOrWhiteSpace(collectionType);
  47. // For conflicting extensions, give priority to videos
  48. if (isMixed && _libraryManager.IsVideoFile(args.Path, libraryOptions))
  49. {
  50. return null;
  51. }
  52. var isStandalone = args.Parent == null;
  53. if (isStandalone ||
  54. string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase) ||
  55. isMixed)
  56. {
  57. return new MediaBrowser.Controller.Entities.Audio.Audio();
  58. }
  59. if (string.Equals(collectionType, CollectionType.Books, StringComparison.OrdinalIgnoreCase))
  60. {
  61. return new AudioBook();
  62. }
  63. }
  64. }
  65. return null;
  66. }
  67. }
  68. }