aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/UserLibrary')
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs66
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs4
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs63
3 files changed, 79 insertions, 54 deletions
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index e0747b547..880d57b9a 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -56,46 +56,52 @@ namespace MediaBrowser.Api.UserLibrary
protected ItemsResult GetResult(GetItemsByName request)
{
User user = null;
- BaseItem item;
+ BaseItem parentItem;
List<BaseItem> libraryItems;
if (request.UserId.HasValue)
{
user = UserManager.GetUserById(request.UserId.Value);
- item = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId);
-
+ parentItem = string.IsNullOrEmpty(request.ParentId) ? user.RootFolder : LibraryManager.GetItemById(request.ParentId);
libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
}
else
{
- item = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : LibraryManager.GetItemById(request.ParentId);
-
- libraryItems = LibraryManager.RootFolder.RecursiveChildren.ToList();
+ parentItem = string.IsNullOrEmpty(request.ParentId) ? LibraryManager.RootFolder : LibraryManager.GetItemById(request.ParentId);
+ libraryItems = LibraryManager.RootFolder.GetRecursiveChildren().ToList();
}
IEnumerable<BaseItem> items;
- if (item.IsFolder)
+ var excludeItemTypes = request.GetExcludeItemTypes();
+ var includeItemTypes = request.GetIncludeItemTypes();
+ var mediaTypes = request.GetMediaTypes();
+
+ Func<BaseItem, bool> filter = i => FilterItem(request, i, excludeItemTypes, includeItemTypes, mediaTypes);
+
+ if (parentItem.IsFolder)
{
- var folder = (Folder)item;
+ var folder = (Folder)parentItem;
if (request.UserId.HasValue)
{
- items = request.Recursive ? folder.GetRecursiveChildren(user) : folder.GetChildren(user, true);
+ items = request.Recursive ?
+ folder.GetRecursiveChildren(user, filter) :
+ folder.GetChildren(user, true).Where(filter);
}
else
{
- items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children;
+ items = request.Recursive ?
+ folder.GetRecursiveChildren(filter) :
+ folder.Children.Where(filter);
}
}
else
{
- items = new[] { item };
+ items = new[] { parentItem }.Where(filter);
}
- items = FilterItems(request, items);
-
var extractedItems = GetAllItems(request, items);
var filteredItems = FilterItems(request, extractedItems, user);
@@ -290,33 +296,41 @@ namespace MediaBrowser.Api.UserLibrary
/// Filters the items.
/// </summary>
/// <param name="request">The request.</param>
- /// <param name="items">The items.</param>
+ /// <param name="f">The f.</param>
+ /// <param name="excludeItemTypes">The exclude item types.</param>
+ /// <param name="includeItemTypes">The include item types.</param>
+ /// <param name="mediaTypes">The media types.</param>
/// <returns>IEnumerable{BaseItem}.</returns>
- protected virtual IEnumerable<BaseItem> FilterItems(GetItemsByName request, IEnumerable<BaseItem> items)
+ protected bool FilterItem(GetItemsByName request, BaseItem f, string[] excludeItemTypes, string[] includeItemTypes, string[] mediaTypes)
{
// Exclude item types
- if (!string.IsNullOrEmpty(request.ExcludeItemTypes))
+ if (excludeItemTypes.Length > 0)
{
- var vals = request.ExcludeItemTypes.Split(',');
- items = items.Where(f => !vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
+ if (excludeItemTypes.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase))
+ {
+ return false;
+ }
}
// Include item types
- if (!string.IsNullOrEmpty(request.IncludeItemTypes))
+ if (includeItemTypes.Length > 0)
{
- var vals = request.IncludeItemTypes.Split(',');
- items = items.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
+ if (!includeItemTypes.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase))
+ {
+ return false;
+ }
}
// Include MediaTypes
- if (!string.IsNullOrEmpty(request.MediaTypes))
+ if (mediaTypes.Length > 0)
{
- var vals = request.MediaTypes.Split(',');
-
- items = items.Where(f => vals.Contains(f.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase));
+ if (!mediaTypes.Contains(f.MediaType ?? string.Empty, StringComparer.OrdinalIgnoreCase))
+ {
+ return false;
+ }
}
- return items;
+ return true;
}
/// <summary>
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 6f6bd2dff..15b1f6dba 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -398,7 +398,7 @@ namespace MediaBrowser.Api.UserLibrary
{
if (user == null)
{
- items = ((Folder)item).RecursiveChildren;
+ items = ((Folder)item).GetRecursiveChildren();
items = _libraryManager.ReplaceVideosWithPrimaryVersions(items);
}
@@ -464,7 +464,7 @@ namespace MediaBrowser.Api.UserLibrary
SortBy = request.GetOrderBy(),
SortOrder = request.SortOrder ?? SortOrder.Ascending,
- Filter = (i, u) => ApplyAdditionalFilters(request, i, u, true, _libraryManager),
+ Filter = i => ApplyAdditionalFilters(request, i, user, true, _libraryManager),
Limit = request.Limit,
StartIndex = request.StartIndex,
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index 3fc42c6b1..c6ec53018 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -259,7 +259,7 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "EnableImageTypes", Description = "Optional. The image types to include in the output.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string EnableImageTypes { get; set; }
-
+
public GetLatestMedia()
{
Limit = 20;
@@ -304,36 +304,45 @@ namespace MediaBrowser.Api.UserLibrary
{
var user = _userManager.GetUserById(request.UserId);
- // Avoid implicitly captured closure
- var libraryItems = string.IsNullOrEmpty(request.ParentId) && user != null ?
- GetItemsConfiguredForLatest(user) :
- GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId);
+ var includeTypes = string.IsNullOrWhiteSpace(request.IncludeItemTypes)
+ ? new string[] { }
+ : request.IncludeItemTypes.Split(',');
- libraryItems = libraryItems.OrderByDescending(i => i.DateCreated)
- .Where(i => i.LocationType != LocationType.Virtual);
+ var currentUser = user;
+
+ Func<BaseItem, bool> filter = i =>
+ {
+ if (includeTypes.Length > 0)
+ {
+ if (!includeTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+ }
+ if (request.IsPlayed.HasValue)
+ {
+ var val = request.IsPlayed.Value;
+ if (i.IsPlayed(currentUser) != val)
+ {
+ return false;
+ }
+ }
- //if (request.IsFolder.HasValue)
- //{
- //var val = request.IsFolder.Value;
- libraryItems = libraryItems.Where(f => f.IsFolder == false);
- //}
+ return i.LocationType != LocationType.Virtual && !i.IsFolder;
+ };
- if (!string.IsNullOrEmpty(request.IncludeItemTypes))
- {
- var vals = request.IncludeItemTypes.Split(',');
- libraryItems = libraryItems.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
- }
+ // Avoid implicitly captured closure
+ var libraryItems = string.IsNullOrEmpty(request.ParentId) && user != null ?
+ GetItemsConfiguredForLatest(user, filter) :
+ GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId, filter);
- var currentUser = user;
+ libraryItems = libraryItems.OrderByDescending(i => i.DateCreated);
if (request.IsPlayed.HasValue)
{
var takeLimit = request.Limit * 20;
-
- var val = request.IsPlayed.Value;
- libraryItems = libraryItems.Where(f => f.IsPlayed(currentUser) == val)
- .Take(takeLimit);
+ libraryItems = libraryItems.Take(takeLimit);
}
// Avoid implicitly captured closure
@@ -394,12 +403,15 @@ namespace MediaBrowser.Api.UserLibrary
return ToOptimizedResult(dtos.ToList());
}
- private IEnumerable<BaseItem> GetItemsConfiguredForLatest(User user)
+ private IEnumerable<BaseItem> GetItemsConfiguredForLatest(User user, Func<BaseItem,bool> filter)
{
+ // Avoid implicitly captured closure
+ var currentUser = user;
+
return user.RootFolder.GetChildren(user, true)
.OfType<Folder>()
.Where(i => !user.Configuration.LatestItemsExcludes.Contains(i.Id.ToString("N")))
- .SelectMany(i => i.GetRecursiveChildren(user))
+ .SelectMany(i => i.GetRecursiveChildren(currentUser, filter))
.DistinctBy(i => i.Id);
}
@@ -453,8 +465,7 @@ namespace MediaBrowser.Api.UserLibrary
var currentUser = user;
var dtos = series
- .GetRecursiveChildren()
- .Where(i => i is Episode && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
+ .GetRecursiveChildren(i => i is Episode && i.ParentIndexNumber.HasValue && i.ParentIndexNumber.Value == 0)
.OrderBy(i =>
{
if (i.PremiereDate.HasValue)