optimize series display

This commit is contained in:
Luke Pulverenti
2016-11-25 12:36:00 -05:00
parent a9645e1429
commit f9702672f4
6 changed files with 233 additions and 141 deletions

View File

@@ -681,6 +681,19 @@ namespace MediaBrowser.Controller.Entities
return result.TotalRecordCount;
}
public virtual int GetRecursiveChildCount(User user)
{
return GetItems(new InternalItemsQuery(user)
{
Recursive = true,
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0
}).Result.TotalRecordCount;
}
public QueryResult<BaseItem> QueryRecursive(InternalItemsQuery query)
{
var user = query.User;
@@ -1404,20 +1417,11 @@ namespace MediaBrowser.Controller.Entities
return;
}
var allItemsQueryResult = await GetItems(new InternalItemsQuery(user)
{
Recursive = true,
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0
}).ConfigureAwait(false);
var recursiveItemCount = allItemsQueryResult.TotalRecordCount;
var recursiveItemCount = GetRecursiveChildCount(user);
if (itemDto != null)
{
itemDto.RecursiveItemCount = allItemsQueryResult.TotalRecordCount;
itemDto.RecursiveItemCount = recursiveItemCount;
}
if (recursiveItemCount > 0 && SupportsPlayedStatus)

View File

@@ -142,6 +142,24 @@ namespace MediaBrowser.Controller.Entities.TV
return result.TotalRecordCount;
}
public override int GetRecursiveChildCount(User user)
{
var query = new InternalItemsQuery(user);
query.AncestorWithPresentationUniqueKey = GetUniqueSeriesKey(this);
if (query.SortBy.Length == 0)
{
query.SortBy = new[] { ItemSortBy.SortName };
}
if (query.IncludeItemTypes.Length == 0)
{
query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name };
}
query.IsVirtualItem = false;
query.Limit = 0;
return LibraryManager.GetItemsResult(query).TotalRecordCount;
}
/// <summary>
/// Gets the user data key.
/// </summary>
@@ -369,7 +387,10 @@ namespace MediaBrowser.Controller.Entities.TV
public IEnumerable<Episode> GetSeasonEpisodes(Season parentSeason, User user)
{
var seriesKey = GetUniqueSeriesKey(this);
// add optimization when this setting is not enabled
var seriesKey = ConfigurationManager.Configuration.DisplaySpecialsWithinSeasons ?
GetUniqueSeriesKey(this) :
GetUniqueSeriesKey(parentSeason);
var query = new InternalItemsQuery(user)
{