FolderResolver.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 =>
  54. {
  55. try
  56. {
  57. return (i.Attributes & FileAttributes.Directory) != FileAttributes.Directory &&
  58. string.Equals(".collection", i.Extension, StringComparison.OrdinalIgnoreCase);
  59. }
  60. catch (IOException)
  61. {
  62. return false;
  63. }
  64. })
  65. .Select(i => Path.GetFileNameWithoutExtension(i.FullName))
  66. .FirstOrDefault();
  67. }
  68. }
  69. /// <summary>
  70. /// Class FolderResolver
  71. /// </summary>
  72. /// <typeparam name="TItemType">The type of the T item type.</typeparam>
  73. public abstract class FolderResolver<TItemType> : ItemResolver<TItemType>
  74. where TItemType : Folder, new()
  75. {
  76. /// <summary>
  77. /// Sets the initial item values.
  78. /// </summary>
  79. /// <param name="item">The item.</param>
  80. /// <param name="args">The args.</param>
  81. protected override void SetInitialItemValues(TItemType item, ItemResolveArgs args)
  82. {
  83. base.SetInitialItemValues(item, args);
  84. item.IsRoot = args.Parent == null;
  85. item.IsPhysicalRoot = args.IsPhysicalRoot;
  86. }
  87. }
  88. }