aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/AggregateFolder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Entities/AggregateFolder.cs')
-rw-r--r--MediaBrowser.Controller/Entities/AggregateFolder.cs68
1 files changed, 68 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs
new file mode 100644
index 000000000..c4fda4fa2
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace MediaBrowser.Controller.Entities
+{
+ /// <summary>
+ /// Specialized folder that can have items added to it's children by external entities.
+ /// Used for our RootFolder so plug-ins can add items.
+ /// </summary>
+ public class AggregateFolder : Folder
+ {
+ /// <summary>
+ /// The _virtual children
+ /// </summary>
+ private readonly ConcurrentBag<BaseItem> _virtualChildren = new ConcurrentBag<BaseItem>();
+
+ /// <summary>
+ /// Gets the virtual children.
+ /// </summary>
+ /// <value>The virtual children.</value>
+ public ConcurrentBag<BaseItem> VirtualChildren
+ {
+ get { return _virtualChildren; }
+ }
+
+ /// <summary>
+ /// Adds the virtual child.
+ /// </summary>
+ /// <param name="child">The child.</param>
+ /// <exception cref="System.ArgumentNullException"></exception>
+ public void AddVirtualChild(BaseItem child)
+ {
+ if (child == null)
+ {
+ throw new ArgumentNullException();
+ }
+
+ _virtualChildren.Add(child);
+ }
+
+ /// <summary>
+ /// Get the children of this folder from the actual file system
+ /// </summary>
+ /// <returns>IEnumerable{BaseItem}.</returns>
+ protected override IEnumerable<BaseItem> GetNonCachedChildren()
+ {
+ return base.GetNonCachedChildren().Concat(_virtualChildren);
+ }
+
+ /// <summary>
+ /// Finds the virtual child.
+ /// </summary>
+ /// <param name="id">The id.</param>
+ /// <returns>BaseItem.</returns>
+ /// <exception cref="System.ArgumentNullException">id</exception>
+ public BaseItem FindVirtualChild(Guid id)
+ {
+ if (id == Guid.Empty)
+ {
+ throw new ArgumentNullException("id");
+ }
+
+ return _virtualChildren.FirstOrDefault(i => i.Id == id);
+ }
+ }
+}