using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Controller.Entities
{
///
/// Specialized folder that can have items added to it's children by external entities.
/// Used for our RootFolder so plug-ins can add items.
///
public class AggregateFolder : Folder
{
///
/// The _virtual children
///
private readonly ConcurrentBag _virtualChildren = new ConcurrentBag();
///
/// Gets the virtual children.
///
/// The virtual children.
public ConcurrentBag VirtualChildren
{
get { return _virtualChildren; }
}
///
/// Adds the virtual child.
///
/// The child.
///
public void AddVirtualChild(BaseItem child)
{
if (child == null)
{
throw new ArgumentNullException();
}
_virtualChildren.Add(child);
}
///
/// Get the children of this folder from the actual file system
///
/// IEnumerable{BaseItem}.
protected override IEnumerable GetNonCachedChildren()
{
return base.GetNonCachedChildren().Concat(_virtualChildren);
}
///
/// Finds the virtual child.
///
/// The id.
/// BaseItem.
/// id
public BaseItem FindVirtualChild(Guid id)
{
if (id == Guid.Empty)
{
throw new ArgumentNullException("id");
}
return _virtualChildren.FirstOrDefault(i => i.Id == id);
}
}
}