aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Entities/Folder.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-04-18 15:22:17 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-04-18 15:22:17 -0400
commit310f0e2811cd56003b67d964a41447e92e61a75f (patch)
tree35f69d15fe0b3435f1285a564e35fafb9b0caf82 /MediaBrowser.Controller/Entities/Folder.cs
parent4d7d8961b44aadd1d1c8f84bedd5d5ff9508d876 (diff)
fixes #2008 - Collections doesn't respect UserPolicy
Diffstat (limited to 'MediaBrowser.Controller/Entities/Folder.cs')
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index be41d896d..e89dd58c8 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.IO;
using MediaBrowser.Model.Channels;
@@ -735,9 +736,61 @@ namespace MediaBrowser.Controller.Entities
query.ParentId = query.ParentId ?? Id;
}
+ if (RequiresPostFiltering2(query))
+ {
+ return QueryWithPostFiltering2(query);
+ }
+
return LibraryManager.GetItemsResult(query);
}
+ private QueryResult<BaseItem> QueryWithPostFiltering2(InternalItemsQuery query)
+ {
+ var startIndex = query.StartIndex;
+ var limit = query.Limit;
+
+ query.StartIndex = null;
+ query.Limit = null;
+
+ var itemsList = LibraryManager.GetItemList(query);
+ var user = query.User;
+
+ if (user != null)
+ {
+ // needed for boxsets
+ itemsList = itemsList.Where(i => i.IsVisibleStandalone(query.User));
+ }
+
+ var itemsArray = itemsList.ToArray();
+ var totalCount = itemsArray.Length;
+
+ if (limit.HasValue)
+ {
+ itemsArray = itemsArray.Skip(startIndex ?? 0).Take(limit.Value).ToArray();
+ }
+ else if (startIndex.HasValue)
+ {
+ itemsArray = itemsArray.Skip(startIndex.Value).ToArray();
+ }
+
+ return new QueryResult<BaseItem>
+ {
+ TotalRecordCount = totalCount,
+ Items = itemsArray
+ };
+ }
+
+ private bool RequiresPostFiltering2(InternalItemsQuery query)
+ {
+ if (query.IncludeItemTypes.Length == 1 && string.Equals(query.IncludeItemTypes[0], typeof(BoxSet).Name, StringComparison.OrdinalIgnoreCase))
+ {
+ Logger.Debug("Query requires post-filtering due to BoxSet query");
+ return true;
+ }
+
+ return false;
+ }
+
private bool RequiresPostFiltering(InternalItemsQuery query)
{
if (LinkedChildren.Count > 0)