From 6f45ea08237eefde317088459c4a87669be981f4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 1 Sep 2014 16:10:54 -0400 Subject: fixes #912 - Add special views for Dlna --- MediaBrowser.ServerApplication/LibraryViewer.cs | 76 ++++++++++++++----------- 1 file changed, 42 insertions(+), 34 deletions(-) (limited to 'MediaBrowser.ServerApplication/LibraryViewer.cs') diff --git a/MediaBrowser.ServerApplication/LibraryViewer.cs b/MediaBrowser.ServerApplication/LibraryViewer.cs index 26cf243da..e89cbd0c0 100644 --- a/MediaBrowser.ServerApplication/LibraryViewer.cs +++ b/MediaBrowser.ServerApplication/LibraryViewer.cs @@ -1,6 +1,9 @@ -using MediaBrowser.Controller.Entities; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; +using MediaBrowser.Model.Library; using MediaBrowser.Model.Querying; using MediaBrowser.Model.Serialization; using System; @@ -16,17 +19,17 @@ namespace MediaBrowser.ServerApplication { private readonly IJsonSerializer _jsonSerializer; private readonly ILibraryManager _libraryManager; - private readonly IItemRepository _itemRepository; + private readonly IUserViewManager _userViewManager; private User _currentUser; - public LibraryViewer(IJsonSerializer jsonSerializer, IUserManager userManager, ILibraryManager libraryManager, IItemRepository itemRepo) + public LibraryViewer(IJsonSerializer jsonSerializer, IUserManager userManager, ILibraryManager libraryManager, IUserViewManager userViewManager) { InitializeComponent(); _jsonSerializer = jsonSerializer; _libraryManager = libraryManager; - _itemRepository = itemRepo; + _userViewManager = userViewManager; foreach (var user in userManager.Users) selectUser.Items.Add(user); @@ -72,23 +75,50 @@ namespace MediaBrowser.ServerApplication LoadTree(); } + private IEnumerable GetItems(Folder parent, User user) + { + if (parent == null) + { + var task = _userViewManager.GetUserViews(new UserViewQuery + { + UserId = user.Id.ToString("N") + + }, CancellationToken.None); + + task.RunSynchronously(); + + return task.Result; + } + else + { + var task = parent.GetUserItems(new UserItemsQuery + { + User = user, + SortBy = new[] { ItemSortBy.SortName } + + }); + + task.RunSynchronously(); + + return task.Result.Items; + } + } + private void LoadTree() { treeView1.Nodes.Clear(); var isPhysical = _currentUser.Name == "Physical"; - IEnumerable children = isPhysical ? new[] { _libraryManager.RootFolder } : _libraryManager.RootFolder.GetChildren(_currentUser, true); - children = OrderByName(children, _currentUser); + IEnumerable children = isPhysical ? new[] { _libraryManager.RootFolder } : GetItems(null, _currentUser); - foreach (Folder folder in children) + foreach (var folder in children.OfType()) { - var currentFolder = folder; var node = new TreeNode { Tag = currentFolder }; - var subChildren = isPhysical ? currentFolder.Children : currentFolder.GetChildren(_currentUser, true); - subChildren = OrderByName(subChildren, _currentUser); + var subChildren = isPhysical ? currentFolder.Children.OrderBy(i => i.SortName) : GetItems(currentFolder, _currentUser); + AddChildren(node, subChildren, _currentUser, isPhysical); node.Text = currentFolder.Name + " (" + node.Nodes.Count + ")"; @@ -111,9 +141,9 @@ namespace MediaBrowser.ServerApplication var subFolder = item as Folder; if (subFolder != null) { - var subChildren = isPhysical ? subFolder.Children : subFolder.GetChildren(_currentUser, true); + var subChildren = isPhysical ? subFolder.Children.OrderBy(i => i.SortName) : GetItems(subFolder, _currentUser); - AddChildren(node, OrderBy(subChildren, user, ItemSortBy.SortName), user, isPhysical); + AddChildren(node, subChildren, user, isPhysical); node.Text = item.Name + " (" + node.Nodes.Count + ")"; } else @@ -124,28 +154,6 @@ namespace MediaBrowser.ServerApplication } } - /// - /// Orders the name of the by. - /// - /// The items. - /// The user. - /// IEnumerable{BaseItem}. - private IEnumerable OrderByName(IEnumerable items, User user) - { - return OrderBy(items, user, ItemSortBy.SortName); - } - - /// - /// Orders the name of the by. - /// - /// The items. - /// The user. - /// IEnumerable{BaseItem}. - private IEnumerable OrderBy(IEnumerable items, User user, string order) - { - return _libraryManager.Sort(items, user, new[] { order }, SortOrder.Ascending); - } - /// /// The INDEN t_ STRING /// -- cgit v1.2.3