sync updates
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
libraryItems = libraryItems.OrderByDescending(i => i.DateCreated)
|
||||
.Where(i => i.LocationType != LocationType.Virtual);
|
||||
|
||||
|
||||
//if (request.IsFolder.HasValue)
|
||||
//{
|
||||
//var val = request.IsFolder.Value;
|
||||
libraryItems = libraryItems.Where(f => f.IsFolder == false);
|
||||
//}
|
||||
|
||||
if (!string.IsNullOrEmpty(request.IncludeItemTypes))
|
||||
{
|
||||
var vals = request.IncludeItemTypes.Split(',');
|
||||
libraryItems = libraryItems.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
var includeTypes = string.IsNullOrWhiteSpace(request.IncludeItemTypes)
|
||||
? new string[] { }
|
||||
: request.IncludeItemTypes.Split(',');
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
return i.LocationType != LocationType.Virtual && !i.IsFolder;
|
||||
};
|
||||
|
||||
// Avoid implicitly captured closure
|
||||
var libraryItems = string.IsNullOrEmpty(request.ParentId) && user != null ?
|
||||
GetItemsConfiguredForLatest(user, filter) :
|
||||
GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId, filter);
|
||||
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user