| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 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>        /// We don't support manual shortcuts        /// </summary>        protected override bool SupportsShortcutChildren        {            get            {                return false;            }        }        /// <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);        }    }}
 |