Backport pull request #8189 from jellyfin/release-10.8.z
Fix GetItems IndexOutOfRangeException when IDs do not exist Original-merge: 527ed0607d5f31a232293b39daac19018518b1a0 Merged-by: Claus Vium <cvium@users.noreply.github.com> Backported-by: Joshua M. Boniface <joshua@boniface.me>
This commit is contained in:
parent
d3b016aae6
commit
e579b4d42d
|
@ -892,29 +892,7 @@ namespace MediaBrowser.Controller.Entities
|
||||||
|
|
||||||
private static BaseItem[] SortItemsByRequest(InternalItemsQuery query, IReadOnlyList<BaseItem> items)
|
private static BaseItem[] SortItemsByRequest(InternalItemsQuery query, IReadOnlyList<BaseItem> items)
|
||||||
{
|
{
|
||||||
var ids = query.ItemIds;
|
return items.OrderBy(i => Array.IndexOf(query.ItemIds, i.Id)).ToArray();
|
||||||
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)
|
public QueryResult<BaseItem> GetItems(InternalItemsQuery query)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user