2
0

MusicArtistResolver.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using MediaBrowser.Controller.Entities.Audio;
  2. using MediaBrowser.Controller.Library;
  3. using MediaBrowser.Controller.Resolvers;
  4. using MediaBrowser.Model.Entities;
  5. using MediaBrowser.Model.Logging;
  6. using System;
  7. using System.IO;
  8. using System.Linq;
  9. using CommonIO;
  10. namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
  11. {
  12. /// <summary>
  13. /// Class MusicArtistResolver
  14. /// </summary>
  15. public class MusicArtistResolver : ItemResolver<MusicArtist>
  16. {
  17. private readonly ILogger _logger;
  18. private readonly IFileSystem _fileSystem;
  19. private readonly ILibraryManager _libraryManager;
  20. public MusicArtistResolver(ILogger logger, IFileSystem fileSystem, ILibraryManager libraryManager)
  21. {
  22. _logger = logger;
  23. _fileSystem = fileSystem;
  24. _libraryManager = libraryManager;
  25. }
  26. /// <summary>
  27. /// Gets the priority.
  28. /// </summary>
  29. /// <value>The priority.</value>
  30. public override ResolverPriority Priority
  31. {
  32. get
  33. {
  34. // Behind special folder resolver
  35. return ResolverPriority.Second;
  36. }
  37. }
  38. /// <summary>
  39. /// Resolves the specified args.
  40. /// </summary>
  41. /// <param name="args">The args.</param>
  42. /// <returns>MusicArtist.</returns>
  43. protected override MusicArtist Resolve(ItemResolveArgs args)
  44. {
  45. if (!args.IsDirectory) return null;
  46. // Avoid mis-identifying top folders
  47. if (args.Parent.IsRoot) return null;
  48. // Don't allow nested artists
  49. if (args.HasParent<MusicArtist>() || args.HasParent<MusicAlbum>())
  50. {
  51. return null;
  52. }
  53. var collectionType = args.GetCollectionType();
  54. var isMusicMediaFolder = string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase);
  55. // If there's a collection type and it's not music, it can't be a series
  56. if (!isMusicMediaFolder)
  57. {
  58. return null;
  59. }
  60. var directoryService = args.DirectoryService;
  61. var albumResolver = new MusicAlbumResolver(_logger, _fileSystem, _libraryManager);
  62. // If we contain an album assume we are an artist folder
  63. return args.FileSystemChildren.Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory).Any(i => albumResolver.IsMusicAlbum(i.FullName, directoryService, args.GetLibraryOptions())) ? new MusicArtist() : null;
  64. }
  65. }
  66. }