reduce library queries

This commit is contained in:
Luke Pulverenti
2016-11-21 03:54:53 -05:00
parent 1dc080df8b
commit f275d7f3d2
32 changed files with 230 additions and 176 deletions

View File

@@ -61,6 +61,12 @@ namespace MediaBrowser.Controller.Entities.Audio
get { return true; }
}
[IgnoreDataMember]
public override bool SupportsInheritedParentImages
{
get { return true; }
}
[IgnoreDataMember]
protected override bool SupportsOwnedItems
{

View File

@@ -1569,6 +1569,12 @@ namespace MediaBrowser.Controller.Entities
return IsVisibleStandaloneInternal(user, true);
}
[IgnoreDataMember]
public virtual bool SupportsInheritedParentImages
{
get { return false; }
}
protected bool IsVisibleStandaloneInternal(User user, bool checkFolders)
{
if (!IsVisible(user))
@@ -2329,17 +2335,25 @@ namespace MediaBrowser.Controller.Entities
{
get
{
if (GetParent() is AggregateFolder || this is BasePluginFolder || this is Channel)
if (this is BasePluginFolder || this is Channel)
{
return true;
}
var view = this as UserView;
if (view != null && string.Equals(view.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
if (view != null)
{
return true;
if (string.Equals(view.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (string.Equals(view.ViewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
if (view != null && string.Equals(view.ViewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase))
if (GetParent() is AggregateFolder)
{
return true;
}

View File

@@ -1383,6 +1383,15 @@ namespace MediaBrowser.Controller.Entities
{
return false;
}
var iItemByName = this as IItemByName;
if (iItemByName != null)
{
var hasDualAccess = this as IHasDualAccess;
if (hasDualAccess == null || hasDualAccess.IsAccessedByName)
{
return false;
}
}
return true;
}
@@ -1395,17 +1404,6 @@ namespace MediaBrowser.Controller.Entities
return;
}
var unplayedQueryResult = await GetItems(new InternalItemsQuery(user)
{
Recursive = true,
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0,
IsPlayed = false
}).ConfigureAwait(false);
var allItemsQueryResult = await GetItems(new InternalItemsQuery(user)
{
Recursive = true,
@@ -1415,17 +1413,28 @@ namespace MediaBrowser.Controller.Entities
Limit = 0
}).ConfigureAwait(false);
var recursiveItemCount = allItemsQueryResult.TotalRecordCount;
if (itemDto != null)
{
itemDto.RecursiveItemCount = allItemsQueryResult.TotalRecordCount;
}
var recursiveItemCount = allItemsQueryResult.TotalRecordCount;
double unplayedCount = unplayedQueryResult.TotalRecordCount;
if (recursiveItemCount > 0)
if (recursiveItemCount > 0 && SupportsPlayedStatus)
{
var unplayedQueryResult = recursiveItemCount > 0 ? await GetItems(new InternalItemsQuery(user)
{
Recursive = true,
IsFolder = false,
IsVirtualItem = false,
EnableTotalRecordCount = true,
Limit = 0,
IsPlayed = false
}).ConfigureAwait(false) : new QueryResult<BaseItem>();
double unplayedCount = unplayedQueryResult.TotalRecordCount;
var unplayedPercentage = (unplayedCount / recursiveItemCount) * 100;
dto.PlayedPercentage = 100 - unplayedPercentage;
dto.Played = dto.PlayedPercentage.Value >= 100;

View File

@@ -124,7 +124,6 @@ namespace MediaBrowser.Controller.Entities
public int? MaxParentalRating { get; set; }
public bool? HasDeadParentId { get; set; }
public bool? IsOffline { get; set; }
public bool? IsVirtualItem { get; set; }
public Guid? ParentId { get; set; }

View File

@@ -71,6 +71,12 @@ namespace MediaBrowser.Controller.Entities.TV
{
return IsStacked || MediaSourceCount > 1;
}
}
[IgnoreDataMember]
public override bool SupportsInheritedParentImages
{
get { return true; }
}
[IgnoreDataMember]

View File

@@ -39,6 +39,12 @@ namespace MediaBrowser.Controller.Entities.TV
}
}
[IgnoreDataMember]
public override bool SupportsInheritedParentImages
{
get { return true; }
}
[IgnoreDataMember]
public override Guid? DisplayParentId
{

View File

@@ -135,7 +135,6 @@ namespace MediaBrowser.Controller.Entities.TV
{
AncestorWithPresentationUniqueKey = GetUniqueSeriesKey(this),
IncludeItemTypes = new[] { typeof(Season).Name },
SortBy = new[] { ItemSortBy.SortName },
IsVirtualItem = false,
Limit = 0
});

View File

@@ -1812,7 +1812,7 @@ namespace MediaBrowser.Controller.Entities
.Where(i => user.IsFolderGrouped(i.Id) && UserView.IsEligibleForGrouping(i));
}
private IEnumerable<Folder> GetMediaFolders(User user, IEnumerable<string> viewTypes)
private List<Folder> GetMediaFolders(User user, IEnumerable<string> viewTypes)
{
if (user == null)
{
@@ -1822,7 +1822,7 @@ namespace MediaBrowser.Controller.Entities
var folder = i as ICollectionFolder;
return folder != null && viewTypes.Contains(folder.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
});
}).ToList();
}
return GetMediaFolders(user)
.Where(i =>
@@ -1830,17 +1830,17 @@ namespace MediaBrowser.Controller.Entities
var folder = i as ICollectionFolder;
return folder != null && viewTypes.Contains(folder.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
});
}).ToList();
}
private IEnumerable<Folder> GetMediaFolders(Folder parent, User user, IEnumerable<string> viewTypes)
private List<Folder> GetMediaFolders(Folder parent, User user, IEnumerable<string> viewTypes)
{
if (parent == null || parent is UserView)
{
return GetMediaFolders(user, viewTypes);
}
return new[] { parent };
return new List<Folder> { parent };
}
private IEnumerable<BaseItem> GetRecursiveChildren(Folder parent, User user, IEnumerable<string> viewTypes)

View File

@@ -538,10 +538,7 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Gets the items.
/// </summary>
/// <param name="query">The query.</param>
/// <param name="parentIds">The parent ids.</param>
/// <returns>List&lt;BaseItem&gt;.</returns>
IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds);
IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, List<BaseItem> parents);
/// <summary>
/// Gets the items result.

View File

@@ -19,6 +19,6 @@ namespace MediaBrowser.Controller.TV
/// <param name="request">The request.</param>
/// <param name="parentsFolders">The parents folders.</param>
/// <returns>QueryResult&lt;BaseItem&gt;.</returns>
QueryResult<BaseItem> GetNextUp(NextUpQuery request, IEnumerable<Folder> parentsFolders);
QueryResult<BaseItem> GetNextUp(NextUpQuery request, List<Folder> parentsFolders);
}
}