diff options
| author | dkanada <dkanada@users.noreply.github.com> | 2020-03-04 01:53:26 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-04 01:53:26 +0900 |
| commit | c07e1e4f84d2bcb0eb965b17819eb72ed7afc63a (patch) | |
| tree | 995318a3e4ce1e5bcd9c8530b17f24fb10cfca47 | |
| parent | 2dc1a182037a6834215e6e7e89a6fffd2743070a (diff) | |
| parent | ba8d8cede9a06e58d3d082c129fb6e31a26317db (diff) | |
Merge pull request #2476 from JustAMan/playto-sort
Bring back sorting when needed to fix PlayTo
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index a892be7a9..c72bd487e 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -807,11 +807,45 @@ namespace MediaBrowser.Controller.Entities return false; } + private static BaseItem[] SortItemsByRequest(InternalItemsQuery query, IReadOnlyList<BaseItem> items) + { + var ids = query.ItemIds; + int size = items.Count; + + // ids can potentially contain non-unique guids, but query result cannot, + // so we include only first occurrence of each guid + var positions = new Dictionary<Guid, int>(size); + int index = 0; + for (int i = 0; i < ids.Length; i++) + { + if (positions.TryAdd(ids[i], index)) + { + index++; + } + } + + var newItems = new BaseItem[size]; + for (int i = 0; i < size; i++) + { + var item = items[i]; + newItems[positions[item.Id]] = item; + } + + return newItems; + } + public QueryResult<BaseItem> GetItems(InternalItemsQuery query) { if (query.ItemIds.Length > 0) { - return LibraryManager.GetItemsResult(query); + var result = LibraryManager.GetItemsResult(query); + + if (query.OrderBy.Count == 0 && query.ItemIds.Length > 1) + { + result.Items = SortItemsByRequest(query, result.Items); + } + + return result; } return GetItemsInternal(query); @@ -823,7 +857,14 @@ namespace MediaBrowser.Controller.Entities if (query.ItemIds.Length > 0) { - return LibraryManager.GetItemList(query); + var result = LibraryManager.GetItemList(query); + + if (query.OrderBy.Count == 0 && query.ItemIds.Length > 1) + { + return SortItemsByRequest(query, result); + } + + return result.ToArray(); } return GetItemsInternal(query).Items; |
