FolderResolver.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using MediaBrowser.Controller.Entities;
  2. using MediaBrowser.Controller.Library;
  3. using MediaBrowser.Controller.Resolvers;
  4. using System;
  5. using System.IO;
  6. using System.Linq;
  7. namespace MediaBrowser.Server.Implementations.Library.Resolvers
  8. {
  9. /// <summary>
  10. /// Class FolderResolver
  11. /// </summary>
  12. public class FolderResolver : FolderResolver<Folder>
  13. {
  14. /// <summary>
  15. /// Gets the priority.
  16. /// </summary>
  17. /// <value>The priority.</value>
  18. public override ResolverPriority Priority
  19. {
  20. get { return ResolverPriority.Last; }
  21. }
  22. /// <summary>
  23. /// Resolves the specified args.
  24. /// </summary>
  25. /// <param name="args">The args.</param>
  26. /// <returns>Folder.</returns>
  27. protected override Folder Resolve(ItemResolveArgs args)
  28. {
  29. if (args.IsDirectory)
  30. {
  31. if (args.IsPhysicalRoot)
  32. {
  33. return new AggregateFolder();
  34. }
  35. if (args.IsRoot)
  36. {
  37. return new UserRootFolder(); //if we got here and still a root - must be user root
  38. }
  39. if (args.IsVf)
  40. {
  41. return new CollectionFolder
  42. {
  43. CollectionType = GetCollectionType(args)
  44. };
  45. }
  46. return new Folder();
  47. }
  48. return null;
  49. }
  50. private string GetCollectionType(ItemResolveArgs args)
  51. {
  52. return args.FileSystemChildren
  53. .Where(i => (i.Attributes & FileAttributes.Directory) != FileAttributes.Directory && string.Equals(".collection", i.Extension, StringComparison.OrdinalIgnoreCase))
  54. .Select(i => Path.GetFileNameWithoutExtension(i.FullName))
  55. .FirstOrDefault();
  56. }
  57. }
  58. /// <summary>
  59. /// Class FolderResolver
  60. /// </summary>
  61. /// <typeparam name="TItemType">The type of the T item type.</typeparam>
  62. public abstract class FolderResolver<TItemType> : ItemResolver<TItemType>
  63. where TItemType : Folder, new()
  64. {
  65. /// <summary>
  66. /// Sets the initial item values.
  67. /// </summary>
  68. /// <param name="item">The item.</param>
  69. /// <param name="args">The args.</param>
  70. protected override void SetInitialItemValues(TItemType item, ItemResolveArgs args)
  71. {
  72. base.SetInitialItemValues(item, args);
  73. item.IsRoot = args.Parent == null;
  74. item.IsPhysicalRoot = args.IsPhysicalRoot;
  75. }
  76. }
  77. }