mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-31 20:24:21 -04:00
Optimize the way items are grouped into collections
This commit is contained in:
parent
89ae336694
commit
723b6abcb3
@ -124,7 +124,7 @@ namespace Emby.Server.Implementations.Collections
|
|||||||
|
|
||||||
private IEnumerable<BoxSet> GetCollections(User user)
|
private IEnumerable<BoxSet> GetCollections(User user)
|
||||||
{
|
{
|
||||||
var folder = GetCollectionsFolder(false).Result;
|
var folder = GetCollectionsFolder(false).GetAwaiter().GetResult();
|
||||||
|
|
||||||
return folder == null
|
return folder == null
|
||||||
? Enumerable.Empty<BoxSet>()
|
? Enumerable.Empty<BoxSet>()
|
||||||
@ -319,11 +319,11 @@ namespace Emby.Server.Implementations.Collections
|
|||||||
{
|
{
|
||||||
var results = new Dictionary<Guid, BaseItem>();
|
var results = new Dictionary<Guid, BaseItem>();
|
||||||
|
|
||||||
var allBoxsets = GetCollections(user).ToList();
|
var allBoxSets = GetCollections(user).ToList();
|
||||||
|
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
{
|
{
|
||||||
if (!(item is ISupportsBoxSetGrouping))
|
if (item is not ISupportsBoxSetGrouping)
|
||||||
{
|
{
|
||||||
results[item.Id] = item;
|
results[item.Id] = item;
|
||||||
}
|
}
|
||||||
@ -331,33 +331,49 @@ namespace Emby.Server.Implementations.Collections
|
|||||||
{
|
{
|
||||||
var itemId = item.Id;
|
var itemId = item.Id;
|
||||||
|
|
||||||
var currentBoxSets = allBoxsets
|
var itemIsInBoxSet = false;
|
||||||
.Where(i => i.ContainsLinkedChildByItemId(itemId))
|
foreach (var boxSet in allBoxSets)
|
||||||
.ToList();
|
|
||||||
|
|
||||||
if (currentBoxSets.Count > 0)
|
|
||||||
{
|
{
|
||||||
foreach (var boxset in currentBoxSets)
|
if (!boxSet.ContainsLinkedChildByItemId(itemId))
|
||||||
{
|
{
|
||||||
results[boxset.Id] = boxset;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemIsInBoxSet = true;
|
||||||
|
|
||||||
|
if (results.ContainsKey(boxSet.Id))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
results[boxSet.Id] = boxSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip any item that is in a box set
|
||||||
|
if (itemIsInBoxSet)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var alreadyInResults = false;
|
||||||
|
// this is kind of a performance hack because only Video has alternate versions that should be in a box set?
|
||||||
|
if (item is Video video)
|
||||||
|
{
|
||||||
|
foreach (var childId in video.GetLocalAlternateVersionIds())
|
||||||
|
{
|
||||||
|
if (!results.ContainsKey(childId))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
alreadyInResults = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
var alreadyInResults = false;
|
|
||||||
foreach (var child in item.GetMediaSources(true))
|
|
||||||
{
|
|
||||||
if (Guid.TryParse(child.Id, out var id) && results.ContainsKey(id))
|
|
||||||
{
|
|
||||||
alreadyInResults = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!alreadyInResults)
|
if (!alreadyInResults)
|
||||||
{
|
{
|
||||||
results[item.Id] = item;
|
results[item.Id] = item;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1434,9 +1434,9 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
var linkedChildren = LinkedChildren;
|
var linkedChildren = LinkedChildren;
|
||||||
foreach (var i in linkedChildren)
|
foreach (var i in linkedChildren)
|
||||||
{
|
{
|
||||||
if (i.ItemId.HasValue && i.ItemId.Value == itemId)
|
if (i.ItemId.HasValue)
|
||||||
{
|
{
|
||||||
return true;
|
return i.ItemId.Value == itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
var child = GetLinkedChild(i);
|
var child = GetLinkedChild(i);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user