diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-19 22:03:37 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-09-19 22:03:37 -0400 |
| commit | 21e9a7950e1047310dc62e26198c7bac91446baa (patch) | |
| tree | fffaa7ea0a38d0483faf5ba55e7b4508f03a4d9f /MediaBrowser.Controller/Entities | |
| parent | 6cab9dc2275785274200fa7fc70703d111ed701f (diff) | |
subtitle fixes
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 61 |
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); } } } |
