MusicArtistResolver.cs 1.6 KB

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