From a2a0e1ae756b3eae6635ebb08ca1cad51898e0b8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 20 Mar 2016 17:32:26 -0400 Subject: [PATCH] fix query by multiple ids --- MediaBrowser.Controller/Entities/Folder.cs | 34 ++++++++++++++----- .../Channels/ChannelPostScanTask.cs | 8 +++-- .../Library/LibraryManager.cs | 7 +++- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index b365248513..dc0a8d0aa3 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -167,7 +167,7 @@ namespace MediaBrowser.Controller.Entities { lock (_childrenSyncLock) { - var newChildren = _children.ToList(); + var newChildren = ChildIds.ToList(); newChildren.AddRange(children); _children = newChildren.ToList(); } @@ -176,11 +176,11 @@ namespace MediaBrowser.Controller.Entities { lock (_childrenSyncLock) { - if (!_children.Contains(child)) + var childIds = ChildIds.ToList(); + if (!childIds.Contains(child)) { - var newChildren = _children.ToList(); - newChildren.Add(child); - _children = newChildren.ToList(); + childIds.Add(child); + _children = childIds.ToList(); } } } @@ -189,7 +189,7 @@ namespace MediaBrowser.Controller.Entities { lock (_childrenSyncLock) { - _children = _children.Except(children).ToList(); + _children = ChildIds.Except(children).ToList(); } } @@ -257,7 +257,7 @@ namespace MediaBrowser.Controller.Entities /// Gets or sets the actual children. /// /// The actual children. - protected virtual IEnumerable ActualChildren + protected virtual IEnumerable ChildIds { get { @@ -267,11 +267,23 @@ namespace MediaBrowser.Controller.Entities { _children = LoadChildren().ToList(); } - return _children.Select(LibraryManager.GetItemById).Where(i => i != null); + return _children.ToList(); } } } + /// + /// Gets the actual children. + /// + /// The actual children. + protected virtual IEnumerable ActualChildren + { + get + { + return ChildIds.Select(LibraryManager.GetItemById).Where(i => i != null); + } + } + /// /// thread-safe access to the actual children of this folder - without regard to user /// @@ -912,6 +924,12 @@ namespace MediaBrowser.Controller.Entities } } + if (query.ItemIds.Length > 0) + { + Logger.Debug("Query requires post-filtering due to ItemIds"); + return true; + } + if (query.PersonIds.Length > 0) { Logger.Debug("Query requires post-filtering due to PersonIds"); diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs index da4a72cd49..08783ae8dc 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelPostScanTask.cs @@ -55,7 +55,7 @@ namespace MediaBrowser.Server.Implementations.Channels } await CleanDatabase(cancellationToken).ConfigureAwait(false); - + progress.Report(100); } @@ -167,10 +167,14 @@ namespace MediaBrowser.Server.Implementations.Channels { var item = _libraryManager.GetItemById(id); + if (item == null) + { + return Task.FromResult(true); + } + return _libraryManager.DeleteItem(item, new DeleteOptions { DeleteFileLocation = false - }); } diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index bf895e5cee..50d3653358 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -369,9 +369,14 @@ namespace MediaBrowser.Server.Implementations.Library public async Task DeleteItem(BaseItem item, DeleteOptions options) { + if (item == null) + { + throw new ArgumentNullException("item"); + } + _logger.Debug("Deleting item, Type: {0}, Name: {1}, Path: {2}, Id: {3}", item.GetType().Name, - item.Name, + item.Name ?? "Unknown name", item.Path ?? string.Empty, item.Id);