aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/BaseApiService.cs34
-rw-r--r--MediaBrowser.Api/GamesService.cs15
-rw-r--r--MediaBrowser.Api/ItemRefreshService.cs2
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs2
-rw-r--r--MediaBrowser.Api/Library/LibraryService.cs81
-rw-r--r--MediaBrowser.Api/Movies/MoviesService.cs11
-rw-r--r--MediaBrowser.Api/Music/AlbumsService.cs8
-rw-r--r--MediaBrowser.Api/SearchService.cs8
-rw-r--r--MediaBrowser.Api/SimilarItemsHelper.cs10
-rw-r--r--MediaBrowser.Api/TvShowsService.cs19
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs66
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs4
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs63
13 files changed, 182 insertions, 141 deletions
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs
index 2aaec8627..dff433c9d 100644
--- a/MediaBrowser.Api/BaseApiService.cs
+++ b/MediaBrowser.Api/BaseApiService.cs
@@ -174,7 +174,7 @@ namespace MediaBrowser.Api
return libraryManager.GetPerson(DeSlugPersonName(name, libraryManager));
}
- protected IEnumerable<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager, string parentId = null)
+ protected IList<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager, string parentId, Func<BaseItem,bool> filter)
{
if (!string.IsNullOrEmpty(parentId))
{
@@ -189,10 +189,13 @@ namespace MediaBrowser.Api
throw new ArgumentException("User not found");
}
- return folder.GetRecursiveChildren(user);
+ return folder
+ .GetRecursiveChildren(user, filter)
+ .ToList();
}
- return folder.GetRecursiveChildren();
+ return folder
+ .GetRecursiveChildren(filter);
}
if (userId.HasValue)
{
@@ -203,10 +206,16 @@ namespace MediaBrowser.Api
throw new ArgumentException("User not found");
}
- return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user);
+ return userManager
+ .GetUserById(userId.Value)
+ .RootFolder
+ .GetRecursiveChildren(user, filter)
+ .ToList();
}
- return libraryManager.RootFolder.GetRecursiveChildren();
+ return libraryManager
+ .RootFolder
+ .GetRecursiveChildren(filter);
}
/// <summary>
@@ -222,8 +231,9 @@ namespace MediaBrowser.Api
return name;
}
- return libraryManager.RootFolder.RecursiveChildren
- .OfType<Audio>()
+ return libraryManager.RootFolder
+ .GetRecursiveChildren(i => i is IHasArtist)
+ .Cast<IHasArtist>()
.SelectMany(i => i.AllArtists)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -264,8 +274,8 @@ namespace MediaBrowser.Api
return name;
}
- return libraryManager.RootFolder.GetRecursiveChildren()
- .OfType<Game>()
+ return libraryManager.RootFolder
+ .GetRecursiveChildren(i => i is Game)
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -287,7 +297,8 @@ namespace MediaBrowser.Api
return name;
}
- return libraryManager.RootFolder.GetRecursiveChildren()
+ return libraryManager.RootFolder
+ .GetRecursiveChildren()
.SelectMany(i => i.Studios)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -309,7 +320,8 @@ namespace MediaBrowser.Api
return name;
}
- return libraryManager.RootFolder.GetRecursiveChildren()
+ return libraryManager.RootFolder
+ .GetRecursiveChildren()
.SelectMany(i => i.People)
.Select(i => i.Name)
.Distinct(StringComparer.OrdinalIgnoreCase)
diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs
index 39e357f49..c18c32920 100644
--- a/MediaBrowser.Api/GamesService.cs
+++ b/MediaBrowser.Api/GamesService.cs
@@ -102,8 +102,8 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns>
public object Get(GetGameSystemSummaries request)
{
- var gameSystems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)
- .OfType<GameSystem>()
+ var gameSystems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, i => i is GameSystem)
+ .Cast<GameSystem>()
.ToList();
var user = request.UserId == null ? null : _userManager.GetUserById(request.UserId.Value);
@@ -119,9 +119,8 @@ namespace MediaBrowser.Api
public object Get(GetPlayerIndex request)
{
- var games = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)
- .OfType<Game>()
- .ToList();
+ var games = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, i => i is Game)
+ .Cast<Game>();
var lookup = games
.ToLookup(i => i.PlayersSupported ?? -1)
@@ -150,9 +149,11 @@ namespace MediaBrowser.Api
DisplayName = system.Name
};
- var items = user == null ? system.RecursiveChildren : system.GetRecursiveChildren(user);
+ var items = user == null ?
+ system.GetRecursiveChildren(i => i is Game) :
+ system.GetRecursiveChildren(user, i => i is Game);
- var games = items.OfType<Game>().ToList();
+ var games = items.Cast<Game>().ToList();
summary.ClientInstalledGameCount = games.Count(i => i.IsPlaceHolder);
diff --git a/MediaBrowser.Api/ItemRefreshService.cs b/MediaBrowser.Api/ItemRefreshService.cs
index 152a64c24..78bc14ab0 100644
--- a/MediaBrowser.Api/ItemRefreshService.cs
+++ b/MediaBrowser.Api/ItemRefreshService.cs
@@ -51,7 +51,7 @@ namespace MediaBrowser.Api
var cancellationToken = CancellationToken.None;
var albums = _libraryManager.RootFolder
- .RecursiveChildren
+ .GetRecursiveChildren()
.OfType<MusicAlbum>()
.Where(i => i.HasArtist(item.Name))
.ToList();
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index 98c259825..ea90afc3b 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -215,7 +215,7 @@ namespace MediaBrowser.Api
{
var folder = (Folder)item;
- foreach (var child in folder.RecursiveChildren.ToList())
+ foreach (var child in folder.GetRecursiveChildren())
{
child.IsLocked = newLockData;
await child.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs
index bac6f6a39..f147234fe 100644
--- a/MediaBrowser.Api/Library/LibraryService.cs
+++ b/MediaBrowser.Api/Library/LibraryService.cs
@@ -392,52 +392,43 @@ namespace MediaBrowser.Api.Library
/// <returns>System.Object.</returns>
public object Get(GetItemCounts request)
{
- var items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)
- .Where(i => i.LocationType != LocationType.Virtual)
- .ToList();
-
- var filteredItems = request.UserId.HasValue ? FilterItems(items, request, request.UserId.Value).ToList() : items;
-
- var albums = filteredItems.OfType<MusicAlbum>().ToList();
- var episodes = filteredItems.OfType<Episode>().ToList();
- var games = filteredItems.OfType<Game>().ToList();
- var movies = filteredItems.OfType<Movie>().ToList();
- var musicVideos = filteredItems.OfType<MusicVideo>().ToList();
- var boxsets = filteredItems.OfType<BoxSet>().ToList();
- var books = filteredItems.OfType<Book>().ToList();
- var songs = filteredItems.OfType<Audio>().ToList();
- var series = filteredItems.OfType<Series>().ToList();
+ var filteredItems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, i => i.LocationType != LocationType.Virtual && FilterItem(i, request, request.UserId));
var counts = new ItemCounts
{
- AlbumCount = albums.Count,
- EpisodeCount = episodes.Count,
- GameCount = games.Count,
- GameSystemCount = filteredItems.OfType<GameSystem>().Count(),
- MovieCount = movies.Count,
- SeriesCount = series.Count,
- SongCount = songs.Count,
- MusicVideoCount = musicVideos.Count,
- BoxSetCount = boxsets.Count,
- BookCount = books.Count,
-
- UniqueTypes = items.Select(i => i.GetClientTypeName()).Distinct().ToList()
+ AlbumCount = filteredItems.Count(i => i is MusicAlbum),
+ EpisodeCount = filteredItems.Count(i => i is Episode),
+ GameCount = filteredItems.Count(i => i is Game),
+ GameSystemCount = filteredItems.Count(i => i is GameSystem),
+ MovieCount = filteredItems.Count(i => i is Movie),
+ SeriesCount = filteredItems.Count(i => i is Series),
+ SongCount = filteredItems.Count(i => i is Audio),
+ MusicVideoCount = filteredItems.Count(i => i is MusicVideo),
+ BoxSetCount = filteredItems.Count(i => i is BoxSet),
+ BookCount = filteredItems.Count(i => i is Book),
+
+ UniqueTypes = filteredItems.Select(i => i.GetClientTypeName()).Distinct().ToList()
};
return ToOptimizedSerializedResultUsingCache(counts);
}
- private IEnumerable<T> FilterItems<T>(IEnumerable<T> items, GetItemCounts request, Guid userId)
- where T : BaseItem
+ private bool FilterItem(BaseItem item, GetItemCounts request, Guid? userId)
{
- if (request.IsFavorite.HasValue)
+ if (userId.HasValue)
{
- var val = request.IsFavorite.Value;
+ if (request.IsFavorite.HasValue)
+ {
+ var val = request.IsFavorite.Value;
- items = items.Where(i => _userDataManager.GetUserData(userId, i.GetUserDataKey()).IsFavorite == val);
+ if (_userDataManager.GetUserData(userId.Value, item.GetUserDataKey()).IsFavorite != val)
+ {
+ return false;
+ }
+ }
}
- return items;
+ return true;
}
/// <summary>
@@ -711,13 +702,24 @@ namespace MediaBrowser.Api.Library
public object Get(GetYearIndex request)
{
- IEnumerable<BaseItem> items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager);
+ var includeTypes = string.IsNullOrWhiteSpace(request.IncludeItemTypes)
+ ? new string[] { }
+ : request.IncludeItemTypes.Split(',');
- if (!string.IsNullOrEmpty(request.IncludeItemTypes))
+ Func<BaseItem, bool> filter = i =>
{
- var vals = request.IncludeItemTypes.Split(',');
- items = items.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
- }
+ if (includeTypes.Length > 0)
+ {
+ if (!includeTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ IEnumerable<BaseItem> items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, filter);
var lookup = items
.ToLookup(i => i.ProductionYear ?? -1)
@@ -747,8 +749,7 @@ namespace MediaBrowser.Api.Library
var dtos = GetSoundtrackSongIds(item, inheritFromParent)
.Select(_libraryManager.GetItemById)
.OfType<MusicAlbum>()
- .SelectMany(i => i.RecursiveChildren)
- .OfType<Audio>()
+ .SelectMany(i => i.GetRecursiveChildren(a => a is Audio))
.OrderBy(i => i.SortName)
.Select(i => _dtoService.GetBaseItemDto(i, dtoOptions, user, item));
diff --git a/MediaBrowser.Api/Movies/MoviesService.cs b/MediaBrowser.Api/Movies/MoviesService.cs
index 0b8bb4036..07f5942c6 100644
--- a/MediaBrowser.Api/Movies/MoviesService.cs
+++ b/MediaBrowser.Api/Movies/MoviesService.cs
@@ -121,8 +121,7 @@ namespace MediaBrowser.Api.Movies
{
var user = _userManager.GetUserById(request.UserId.Value);
- var movies = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId)
- .Where(i => i is Movie);
+ IEnumerable<BaseItem> movies = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId, i => i is Movie);
movies = _libraryManager.ReplaceVideosWithPrimaryVersions(movies);
@@ -174,11 +173,11 @@ namespace MediaBrowser.Api.Movies
(request.UserId.HasValue ? user.RootFolder :
_libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
+ Func<BaseItem, bool> filter = i => i.Id != item.Id && includeInSearch(i);
+
var inputItems = user == null
- ? _libraryManager.RootFolder.GetRecursiveChildren().Where(i => i.Id != item.Id)
- : user.RootFolder.GetRecursiveChildren(user).Where(i => i.Id != item.Id);
-
- inputItems = inputItems.Where(includeInSearch);
+ ? _libraryManager.RootFolder.GetRecursiveChildren(filter)
+ : user.RootFolder.GetRecursiveChildren(user, filter);
var list = inputItems.ToList();
diff --git a/MediaBrowser.Api/Music/AlbumsService.cs b/MediaBrowser.Api/Music/AlbumsService.cs
index 4cfb3c7d4..76c6c5776 100644
--- a/MediaBrowser.Api/Music/AlbumsService.cs
+++ b/MediaBrowser.Api/Music/AlbumsService.cs
@@ -77,14 +77,14 @@ namespace MediaBrowser.Api.Music
var album1 = (MusicAlbum)item1;
var album2 = (MusicAlbum)item2;
- var artists1 = album1.GetRecursiveChildren()
- .OfType<Audio>()
+ var artists1 = album1.GetRecursiveChildren(i => i is IHasArtist)
+ .Cast<IHasArtist>()
.SelectMany(i => i.AllArtists)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
- var artists2 = album2.GetRecursiveChildren()
- .OfType<Audio>()
+ var artists2 = album2.GetRecursiveChildren(i => i is IHasArtist)
+ .Cast<IHasArtist>()
.SelectMany(i => i.AllArtists)
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs
index 61c7305b5..4dcf72407 100644
--- a/MediaBrowser.Api/SearchService.cs
+++ b/MediaBrowser.Api/SearchService.cs
@@ -194,21 +194,23 @@ namespace MediaBrowser.Api
{
result.Series = season.Series.Name;
- result.EpisodeCount = season.GetRecursiveChildren().Count(i => i is Episode);
+ result.EpisodeCount = season.GetRecursiveChildren(i => i is Episode).Count;
}
var series = item as Series;
if (series != null)
{
- result.EpisodeCount = series.GetRecursiveChildren().Count(i => i is Episode);
+ result.EpisodeCount = series.GetRecursiveChildren(i => i is Episode).Count;
}
var album = item as MusicAlbum;
if (album != null)
{
- var songs = album.GetRecursiveChildren().OfType<Audio>().ToList();
+ var songs = album.GetRecursiveChildren(i => i is Audio)
+ .Cast<Audio>()
+ .ToList();
result.SongCount = songs.Count;
diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs
index 150aebf50..e061c391a 100644
--- a/MediaBrowser.Api/SimilarItemsHelper.cs
+++ b/MediaBrowser.Api/SimilarItemsHelper.cs
@@ -76,13 +76,13 @@ namespace MediaBrowser.Api
(request.UserId.HasValue ? user.RootFolder :
libraryManager.RootFolder) : libraryManager.GetItemById(request.Id);
- var fields = request.GetItemFields().ToList();
+ Func<BaseItem, bool> filter = i => i.Id != item.Id && includeInSearch(i);
var inputItems = user == null
- ? libraryManager.RootFolder.GetRecursiveChildren().Where(i => i.Id != item.Id)
- : user.RootFolder.GetRecursiveChildren(user).Where(i => i.Id != item.Id);
+ ? libraryManager.RootFolder.GetRecursiveChildren(filter)
+ : user.RootFolder.GetRecursiveChildren(user, filter);
- var items = GetSimilaritems(item, inputItems.Where(includeInSearch), getSimilarityScore)
+ var items = GetSimilaritems(item, inputItems, getSimilarityScore)
.ToList();
IEnumerable<BaseItem> returnItems = items;
@@ -165,7 +165,7 @@ namespace MediaBrowser.Api
// Find common keywords
points += GetKeywords(item1).Where(i => GetKeywords(item2).Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 10);
-
+
// Find common studios
points += item1.Studios.Where(i => item2.Studios.Contains(i, StringComparer.OrdinalIgnoreCase)).Sum(i => 3);
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 79db6cbe5..ccb844912 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -256,10 +256,10 @@ namespace MediaBrowser.Api
{
var user = _userManager.GetUserById(request.UserId);
- var items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId)
- .OfType<Episode>();
+ var items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, request.ParentId, i => i is Episode);
- var itemsList = _libraryManager.Sort(items, user, new[] { "PremiereDate", "AirTime", "SortName" }, SortOrder.Ascending)
+ var itemsList = _libraryManager
+ .Sort(items, user, new[] { "PremiereDate", "AirTime", "SortName" }, SortOrder.Ascending)
.Cast<Episode>()
.ToList();
@@ -450,24 +450,25 @@ namespace MediaBrowser.Api
episodes = episodes.Where(i => i.IsVirtualUnaired == val);
}
+ IEnumerable<BaseItem> returnItems = episodes;
+
// This must be the last filter
if (!string.IsNullOrEmpty(request.AdjacentTo))
{
- episodes = UserViewBuilder.FilterForAdjacency(episodes, request.AdjacentTo)
- .Cast<Episode>();
+ returnItems = UserViewBuilder.FilterForAdjacency(returnItems, request.AdjacentTo);
}
- episodes = _libraryManager.ReplaceVideosWithPrimaryVersions(episodes).Cast<Episode>();
+ returnItems = _libraryManager.ReplaceVideosWithPrimaryVersions(returnItems);
var dtoOptions = GetDtoOptions(request);
- var returnItems = _dtoService.GetBaseItemDtos(episodes, dtoOptions, user)
+ var dtos = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user)
.ToArray();
return new ItemsResult
{
- TotalRecordCount = returnItems.Length,
- Items = returnItems
+ TotalRecordCount = dtos.Length,
+ Items = dtos
};
}
}
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)