mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-17 06:23:03 +03:00
Compare commits
2 Commits
explicit-l
...
explicit-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45d51568e7 | ||
|
|
c370de77de |
@@ -434,7 +434,7 @@ public sealed class BaseItemRepository
|
|||||||
|
|
||||||
private IQueryable<BaseItemEntity> PrepareItemQuery(JellyfinDbContext context, InternalItemsQuery filter)
|
private IQueryable<BaseItemEntity> PrepareItemQuery(JellyfinDbContext context, InternalItemsQuery filter)
|
||||||
{
|
{
|
||||||
IQueryable<BaseItemEntity> dbQuery = context.BaseItems;
|
IQueryable<BaseItemEntity> dbQuery = context.BaseItems.AsNoTracking();
|
||||||
dbQuery = dbQuery.AsSingleQuery();
|
dbQuery = dbQuery.AsSingleQuery();
|
||||||
|
|
||||||
return dbQuery;
|
return dbQuery;
|
||||||
@@ -442,35 +442,75 @@ public sealed class BaseItemRepository
|
|||||||
|
|
||||||
private IReadOnlyList<BaseItemEntity> GetEntities(IQueryable<BaseItemEntity> dbQuery, JellyfinDbContext context, InternalItemsQuery filter)
|
private IReadOnlyList<BaseItemEntity> GetEntities(IQueryable<BaseItemEntity> dbQuery, JellyfinDbContext context, InternalItemsQuery filter)
|
||||||
{
|
{
|
||||||
var items = dbQuery.AsEnumerable().Where(e => e is not null).ToArray();
|
var items = dbQuery.Where(e => e != null).ToDictionary(e => e.Id, e => e);
|
||||||
var itemIds = items.Select(e => e.Id).ToArray();
|
var itemIds = items.Keys.ToArray();
|
||||||
|
|
||||||
|
if (itemIds.Length == 0)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
if (filter.TrailerTypes.Length > 0 || filter.IncludeItemTypes.Contains(BaseItemKind.Trailer))
|
if (filter.TrailerTypes.Length > 0 || filter.IncludeItemTypes.Contains(BaseItemKind.Trailer))
|
||||||
{
|
{
|
||||||
context.BaseItemTrailerTypes.WhereOneOrMany(itemIds, e => e.ItemId).Load();
|
var values = context.BaseItemTrailerTypes.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
if (items.TryGetValue(value.Key, out var item))
|
||||||
|
{
|
||||||
|
item.TrailerTypes = value.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.DtoOptions.ContainsField(ItemFields.ProviderIds))
|
if (filter.DtoOptions.ContainsField(ItemFields.ProviderIds))
|
||||||
{
|
{
|
||||||
context.BaseItemProviders.WhereOneOrMany(itemIds, e => e.ItemId).Load();
|
var values = context.BaseItemProviders.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
if (items.TryGetValue(value.Key, out var item))
|
||||||
|
{
|
||||||
|
item.Provider = value.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.DtoOptions.ContainsField(ItemFields.Settings))
|
if (filter.DtoOptions.ContainsField(ItemFields.Settings))
|
||||||
{
|
{
|
||||||
context.BaseItemMetadataFields.WhereOneOrMany(itemIds, e => e.ItemId).Load();
|
var values = context.BaseItemMetadataFields.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
if (items.TryGetValue(value.Key, out var item))
|
||||||
|
{
|
||||||
|
item.LockedFields = value.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.DtoOptions.EnableImages)
|
if (filter.DtoOptions.EnableImages)
|
||||||
{
|
{
|
||||||
context.BaseItemImageInfos.WhereOneOrMany(itemIds, e => e.ItemId).Load();
|
var values = context.BaseItemImageInfos.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
if (items.TryGetValue(value.Key, out var item))
|
||||||
|
{
|
||||||
|
item.Images = value.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter.DtoOptions.EnableUserData)
|
if (filter.DtoOptions.EnableUserData)
|
||||||
{
|
{
|
||||||
context.UserData.WhereOneOrMany(itemIds, e => e.ItemId).Load();
|
var values = context.UserData.WhereOneOrMany(itemIds, e => e.ItemId).GroupBy(x => x.ItemId).ToArray();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
if (items.TryGetValue(value.Key, out var item))
|
||||||
|
{
|
||||||
|
item.UserData = value.ToArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return items;
|
return items.Values.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
|||||||
Reference in New Issue
Block a user