MusicArtistResolver.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using MediaBrowser.Controller.Entities.Audio;
  2. using MediaBrowser.Controller.Library;
  3. using MediaBrowser.Controller.Resolvers;
  4. using MediaBrowser.Model.Entities;
  5. using System;
  6. using System.IO;
  7. using System.Linq;
  8. namespace MediaBrowser.Server.Implementations.Library.Resolvers.Audio
  9. {
  10. /// <summary>
  11. /// Class MusicArtistResolver
  12. /// </summary>
  13. public class MusicArtistResolver : ItemResolver<MusicArtist>
  14. {
  15. /// <summary>
  16. /// Gets the priority.
  17. /// </summary>
  18. /// <value>The priority.</value>
  19. public override ResolverPriority Priority
  20. {
  21. get { return ResolverPriority.Third; } // we need to be ahead of the generic folder resolver but behind the movie one
  22. }
  23. /// <summary>
  24. /// Resolves the specified args.
  25. /// </summary>
  26. /// <param name="args">The args.</param>
  27. /// <returns>MusicArtist.</returns>
  28. protected override MusicArtist Resolve(ItemResolveArgs args)
  29. {
  30. if (!args.IsDirectory) return null;
  31. //Avoid mis-identifying top folders
  32. if (args.Parent == null) return null;
  33. if (args.Parent.IsRoot) return null;
  34. // Don't allow nested artists
  35. if (args.Parent is MusicArtist)
  36. {
  37. return null;
  38. }
  39. var collectionType = args.GetCollectionType();
  40. // If there's a collection type and it's not music, it can't be a series
  41. if (!string.IsNullOrEmpty(collectionType) &&
  42. !string.Equals(collectionType, CollectionType.Music, StringComparison.OrdinalIgnoreCase))
  43. {
  44. return null;
  45. }
  46. // If we contain an album assume we are an artist folder
  47. return args.FileSystemChildren.Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory).Any(i => MusicAlbumResolver.IsMusicAlbum(i.FullName)) ? new MusicArtist() : null;
  48. }
  49. }
  50. }