aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-19 22:03:37 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-09-19 22:03:37 -0400
commit21e9a7950e1047310dc62e26198c7bac91446baa (patch)
treefffaa7ea0a38d0483faf5ba55e7b4508f03a4d9f /MediaBrowser.Controller/Entities
parent6cab9dc2275785274200fa7fc70703d111ed701f (diff)
subtitle fixes
Diffstat (limited to 'MediaBrowser.Controller/Entities')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs61
1 files changed, 39 insertions, 22 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 855bbb2058..77cdfa0855 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -951,15 +951,39 @@ namespace MediaBrowser.Controller.Entities
return result;
}
- var children = Children;
+ return GetChildrenList(user, includeLinkedChildren);
+ }
+
+ /// <summary>
+ /// Gets the children list.
+ /// </summary>
+ /// <param name="user">The user.</param>
+ /// <param name="includeLinkedChildren">if set to <c>true</c> [include linked children].</param>
+ /// <returns>List{BaseItem}.</returns>
+ private List<BaseItem> GetChildrenList(User user, bool includeLinkedChildren)
+ {
+ var list = new List<BaseItem>();
+
+ foreach (var child in Children)
+ {
+ if (child.IsVisible(user))
+ {
+ list.Add(child);
+ }
+ }
if (includeLinkedChildren)
{
- children = children.Concat(GetLinkedChildren());
+ foreach (var child in GetLinkedChildren())
+ {
+ if (child.IsVisible(user))
+ {
+ list.Add(child);
+ }
+ }
}
- // If indexed is false or the indexing function is null
- return children.AsParallel().Where(c => c.IsVisible(user)).AsEnumerable();
+ return list;
}
/// <summary>
@@ -976,42 +1000,35 @@ namespace MediaBrowser.Controller.Entities
throw new ArgumentNullException();
}
- var children = GetRecursiveChildrenInternal(user, includeLinkedChildren);
+ var list = new List<BaseItem>(10000);
+
+ AddRecursiveChildrenInternal(user, includeLinkedChildren, list);
if (includeLinkedChildren)
{
- children = children.Distinct();
+ list = list.Distinct().ToList();
}
- return children;
+ return list;
}
/// <summary>
- /// Gets allowed recursive children of an item
+ /// Adds the recursive children internal.
/// </summary>
/// <param name="user">The user.</param>
/// <param name="includeLinkedChildren">if set to <c>true</c> [include linked children].</param>
- /// <returns>IEnumerable{BaseItem}.</returns>
- /// <exception cref="System.ArgumentNullException"></exception>
- private IEnumerable<BaseItem> GetRecursiveChildrenInternal(User user, bool includeLinkedChildren)
+ /// <param name="list">The list.</param>
+ private void AddRecursiveChildrenInternal(User user, bool includeLinkedChildren, List<BaseItem> list)
{
- if (user == null)
+ foreach (var item in GetChildrenList(user, includeLinkedChildren))
{
- throw new ArgumentNullException();
- }
-
- foreach (var item in GetChildren(user, includeLinkedChildren))
- {
- yield return item;
+ list.Add(item);
var subFolder = item as Folder;
if (subFolder != null)
{
- foreach (var subitem in subFolder.GetRecursiveChildrenInternal(user, includeLinkedChildren))
- {
- yield return subitem;
- }
+ subFolder.AddRecursiveChildrenInternal(user, includeLinkedChildren, list);
}
}
}