From f4d61ddcc69b2577c456390a87c78726464f630b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 20 Mar 2016 16:35:02 -0400 Subject: [PATCH] update db querying --- MediaBrowser.Controller/Entities/Folder.cs | 98 +++++++--------------- 1 file changed, 32 insertions(+), 66 deletions(-) diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index faa5f7dc51..b365248513 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -148,7 +148,7 @@ namespace MediaBrowser.Controller.Entities item.DateModified = DateTime.UtcNow; } - AddChildInternal(item); + AddChildInternal(item.Id); await LibraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false); @@ -163,45 +163,33 @@ namespace MediaBrowser.Controller.Entities return ConfigurationManager.Configuration.MigrationVersion >= 1; } - protected void AddChildrenInternal(IEnumerable children) + protected void AddChildrenInternal(List children) { - var actualChildren = ActualChildren; - lock (_childrenSyncLock) { - var newChildren = actualChildren.ToList(); + var newChildren = _children.ToList(); newChildren.AddRange(children); - _children = newChildren; + _children = newChildren.ToList(); } } - protected void AddChildInternal(BaseItem child) - { - var actualChildren = ActualChildren; - - lock (_childrenSyncLock) - { - var newChildren = actualChildren.ToList(); - newChildren.Add(child); - _children = newChildren; - } - } - - protected void RemoveChildrenInternal(IEnumerable children) - { - var ids = children.Select(i => i.Id).ToList(); - var actualChildren = ActualChildren; - - lock (_childrenSyncLock) - { - _children = actualChildren.Where(i => !ids.Contains(i.Id)).ToList(); - } - } - - protected void ClearChildrenInternal() + protected void AddChildInternal(Guid child) { lock (_childrenSyncLock) { - _children = new List(); + if (!_children.Contains(child)) + { + var newChildren = _children.ToList(); + newChildren.Add(child); + _children = newChildren.ToList(); + } + } + } + + protected void RemoveChildrenInternal(List children) + { + lock (_childrenSyncLock) + { + _children = _children.Except(children).ToList(); } } @@ -214,7 +202,7 @@ namespace MediaBrowser.Controller.Entities /// Unable to remove + item.Name public Task RemoveChild(BaseItem item, CancellationToken cancellationToken) { - RemoveChildrenInternal(new[] { item }); + RemoveChildrenInternal(new[] { item.Id }.ToList()); item.SetParent(null); @@ -226,25 +214,6 @@ namespace MediaBrowser.Controller.Entities return Task.FromResult(true); } - /// - /// Clears the children. - /// - /// The cancellation token. - /// Task. - public Task ClearChildren(CancellationToken cancellationToken) - { - var items = ActualChildren.ToList(); - - ClearChildrenInternal(); - - foreach (var item in items) - { - LibraryManager.ReportItemRemoved(item); - } - - return ItemRepository.SaveChildren(Id, ActualChildren.Select(i => i.Id).ToList(), cancellationToken); - } - #region Indexing /// @@ -279,7 +248,7 @@ namespace MediaBrowser.Controller.Entities /// /// The children /// - private IReadOnlyList _children; + private IReadOnlyList _children; /// /// The _children sync lock /// @@ -292,17 +261,14 @@ namespace MediaBrowser.Controller.Entities { get { - if (_children == null) + lock (_childrenSyncLock) { - lock (_childrenSyncLock) + if (_children == null) { - if (_children == null) - { - _children = LoadChildren().ToList(); - } + _children = LoadChildren().ToList(); } + return _children.Select(LibraryManager.GetItemById).Where(i => i != null); } - return _children; } } @@ -356,7 +322,7 @@ namespace MediaBrowser.Controller.Entities /// Loads our children. Validation will occur externally. /// We want this sychronous. /// - protected virtual IEnumerable LoadChildren() + protected virtual IEnumerable LoadChildren() { //just load our children from the repo - the library will be validated and maintained in other processes return GetCachedChildren(); @@ -506,7 +472,7 @@ namespace MediaBrowser.Controller.Entities if (actualRemovals.Count > 0) { - RemoveChildrenInternal(actualRemovals); + RemoveChildrenInternal(actualRemovals.Select(i => i.Id).ToList()); foreach (var item in actualRemovals) { @@ -521,7 +487,7 @@ namespace MediaBrowser.Controller.Entities await LibraryManager.CreateItems(newItems, cancellationToken).ConfigureAwait(false); - AddChildrenInternal(newItems); + AddChildrenInternal(newItems.Select(i => i.Id).ToList()); if (!EnableNewFolderQuerying()) { @@ -754,18 +720,18 @@ namespace MediaBrowser.Controller.Entities /// Get our children from the repo - stubbed for now /// /// IEnumerable{BaseItem}. - protected IEnumerable GetCachedChildren() + protected IEnumerable GetCachedChildren() { if (EnableNewFolderQuerying()) { - return ItemRepository.GetItemList(new InternalItemsQuery + return ItemRepository.GetItemIdsList(new InternalItemsQuery { ParentId = Id - }).Select(RetrieveChild).Where(i => i != null); + }); } - return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null); + return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null).Select(i => i.Id); } private BaseItem RetrieveChild(BaseItem child)