mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-03-06 18:26:33 +00:00
improve nextup queries
This commit is contained in:
@@ -970,6 +970,27 @@ namespace MediaBrowser.Controller.Entities
|
||||
return GetItemsInternal(query);
|
||||
}
|
||||
|
||||
public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query)
|
||||
{
|
||||
query.EnableTotalRecordCount = false;
|
||||
|
||||
if (query.ItemIds.Length > 0)
|
||||
{
|
||||
var result = LibraryManager.GetItemList(query);
|
||||
|
||||
if (query.SortBy.Length == 0)
|
||||
{
|
||||
var ids = query.ItemIds.ToList();
|
||||
|
||||
// Try to preserve order
|
||||
result = result.OrderBy(i => ids.IndexOf(i.Id.ToString("N"))).ToArray();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return GetItemsInternal(query).Items;
|
||||
}
|
||||
|
||||
protected virtual QueryResult<BaseItem> GetItemsInternal(InternalItemsQuery query)
|
||||
{
|
||||
if (SourceType == SourceType.Channel)
|
||||
@@ -1375,10 +1396,10 @@ namespace MediaBrowser.Controller.Entities
|
||||
query.IsVirtualItem = false;
|
||||
}
|
||||
|
||||
var itemsResult = GetItems(query);
|
||||
var itemsResult = GetItemList(query);
|
||||
|
||||
// Sweep through recursively and update status
|
||||
var tasks = itemsResult.Items.Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
|
||||
var tasks = itemsResult.Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
|
||||
|
||||
await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
}
|
||||
@@ -1390,7 +1411,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
/// <returns>Task.</returns>
|
||||
public override async Task MarkUnplayed(User user)
|
||||
{
|
||||
var itemsResult = GetItems(new InternalItemsQuery
|
||||
var itemsResult = GetItemList(new InternalItemsQuery
|
||||
{
|
||||
User = user,
|
||||
Recursive = true,
|
||||
@@ -1400,14 +1421,14 @@ namespace MediaBrowser.Controller.Entities
|
||||
});
|
||||
|
||||
// Sweep through recursively and update status
|
||||
var tasks = itemsResult.Items.Select(c => c.MarkUnplayed(user));
|
||||
var tasks = itemsResult.Select(c => c.MarkUnplayed(user));
|
||||
|
||||
await Task.WhenAll(tasks).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public override bool IsPlayed(User user)
|
||||
{
|
||||
var itemsResult = GetItems(new InternalItemsQuery(user)
|
||||
var itemsResult = GetItemList(new InternalItemsQuery(user)
|
||||
{
|
||||
Recursive = true,
|
||||
IsFolder = false,
|
||||
@@ -1416,7 +1437,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
});
|
||||
|
||||
return itemsResult.Items
|
||||
return itemsResult
|
||||
.All(i => i.IsPlayed(user));
|
||||
}
|
||||
|
||||
|
||||
@@ -161,6 +161,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
public string SeriesPresentationUniqueKey { get; set; }
|
||||
|
||||
public bool GroupByPresentationUniqueKey { get; set; }
|
||||
public bool GroupBySeriesPresentationUniqueKey { get; set; }
|
||||
public bool EnableTotalRecordCount { get; set; }
|
||||
public bool ForceDirect { get; set; }
|
||||
public Dictionary<string, string> ExcludeProviderIds { get; set; }
|
||||
|
||||
@@ -193,7 +193,7 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||
|
||||
if (query.IncludeItemTypes.Length == 0)
|
||||
{
|
||||
query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name };
|
||||
query.IncludeItemTypes = new[] { typeof(Episode).Name };
|
||||
}
|
||||
query.IsVirtualItem = false;
|
||||
query.Limit = 0;
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
public override IEnumerable<BaseItem> GetChildren(User user, bool includeLinkedChildren)
|
||||
{
|
||||
var result = GetItems(new InternalItemsQuery
|
||||
var result = GetItemList(new InternalItemsQuery
|
||||
{
|
||||
User = user,
|
||||
EnableTotalRecordCount = false,
|
||||
@@ -90,7 +90,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
});
|
||||
|
||||
return result.Items;
|
||||
return result;
|
||||
}
|
||||
|
||||
public override bool CanDelete()
|
||||
@@ -105,7 +105,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
public override IEnumerable<BaseItem> GetRecursiveChildren(User user, InternalItemsQuery query)
|
||||
{
|
||||
var result = GetItems(new InternalItemsQuery
|
||||
var result = GetItemList(new InternalItemsQuery
|
||||
{
|
||||
User = user,
|
||||
Recursive = true,
|
||||
@@ -117,7 +117,7 @@ namespace MediaBrowser.Controller.Entities
|
||||
|
||||
});
|
||||
|
||||
return result.Items.Where(i => UserViewBuilder.FilterItem(i, query));
|
||||
return result.Where(i => UserViewBuilder.FilterItem(i, query));
|
||||
}
|
||||
|
||||
protected override IEnumerable<BaseItem> GetEligibleChildrenForRecursiveChildren(User user)
|
||||
|
||||
@@ -182,10 +182,7 @@ namespace MediaBrowser.Controller.Playlists
|
||||
DtoOptions = options
|
||||
};
|
||||
|
||||
var itemsResult = folder.GetItems(query);
|
||||
var items = itemsResult.Items;
|
||||
|
||||
return items;
|
||||
return folder.GetItemList(query);
|
||||
}
|
||||
|
||||
return new[] { item };
|
||||
|
||||
Reference in New Issue
Block a user