diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs
index 159a250044..040872fcc8 100644
--- a/MediaBrowser.Api/GamesService.cs
+++ b/MediaBrowser.Api/GamesService.cs
@@ -192,7 +192,7 @@ namespace MediaBrowser.Api
_userDataRepository,
_dtoService,
Logger,
- request, item => item is Game,
+ request, new[] { typeof(Game) },
SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedSerializedResultUsingCache(result);
diff --git a/MediaBrowser.Api/Library/LibraryService.cs b/MediaBrowser.Api/Library/LibraryService.cs
index 871f5e8a84..097546af6d 100644
--- a/MediaBrowser.Api/Library/LibraryService.cs
+++ b/MediaBrowser.Api/Library/LibraryService.cs
@@ -397,7 +397,7 @@ namespace MediaBrowser.Api.Library
});
}
- if (item is Series || (program != null && program.IsSeries) )
+ if (item is Series || (program != null && program.IsSeries))
{
return new TvShowsService(_userManager, _userDataManager, _libraryManager, _itemRepo, _dtoService, _tvManager)
{
@@ -659,87 +659,38 @@ namespace MediaBrowser.Api.Library
/// System.Object.
public object Get(GetItemCounts request)
{
- var filteredItems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, i => i.LocationType != LocationType.Virtual && FilterItem(i, request, request.UserId));
+ var user = string.IsNullOrWhiteSpace(request.UserId) ? null : _userManager.GetUserById(request.UserId);
var counts = new ItemCounts
{
- 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()
+ AlbumCount = GetCount(typeof(MusicAlbum), user, request),
+ EpisodeCount = GetCount(typeof(Episode), user, request),
+ GameCount = GetCount(typeof(Game), user, request),
+ GameSystemCount = GetCount(typeof(GameSystem), user, request),
+ MovieCount = GetCount(typeof(Movie), user, request),
+ SeriesCount = GetCount(typeof(Series), user, request),
+ SongCount = GetCount(typeof(Audio), user, request),
+ MusicVideoCount = GetCount(typeof(MusicVideo), user, request),
+ BoxSetCount = GetCount(typeof(BoxSet), user, request),
+ BookCount = GetCount(typeof(Book), user, request)
};
return ToOptimizedSerializedResultUsingCache(counts);
}
- private IList GetAllLibraryItems(string userId, IUserManager userManager, ILibraryManager libraryManager, string parentId, Func filter)
+ private int GetCount(Type type, User user, GetItemCounts request)
{
- if (!string.IsNullOrEmpty(parentId))
- {
- var folder = (Folder)libraryManager.GetItemById(new Guid(parentId));
-
- if (!string.IsNullOrWhiteSpace(userId))
- {
- var user = userManager.GetUserById(userId);
-
- if (user == null)
- {
- throw new ArgumentException("User not found");
- }
-
- return folder
- .GetRecursiveChildren(user, filter)
- .ToList();
- }
-
- return folder
- .GetRecursiveChildren(filter);
- }
- if (!string.IsNullOrWhiteSpace(userId))
- {
- var user = userManager.GetUserById(userId);
-
- if (user == null)
- {
- throw new ArgumentException("User not found");
- }
-
- return userManager
- .GetUserById(userId)
- .RootFolder
- .GetRecursiveChildren(user, filter)
- .ToList();
- }
-
- return libraryManager
- .RootFolder
- .GetRecursiveChildren(filter);
- }
-
- private bool FilterItem(BaseItem item, GetItemCounts request, string userId)
- {
- if (!string.IsNullOrWhiteSpace(userId))
- {
- if (request.IsFavorite.HasValue)
- {
- var val = request.IsFavorite.Value;
-
- if (_userDataManager.GetUserData(userId, item.GetUserDataKey()).IsFavorite != val)
- {
- return false;
- }
- }
- }
+ var query = new InternalItemsQuery(user)
+ {
+ IncludeItemTypes = new[] { type.Name },
+ Limit = 0,
+ Recursive = true,
+ ExcludeLocationTypes = new[] { LocationType.Virtual },
+ SourceTypes = new[] { SourceType.Library },
+ IsFavorite = request.IsFavorite
+ };
- return true;
+ return _libraryManager.GetItemsResult(query).TotalRecordCount;
}
///
@@ -980,20 +931,15 @@ namespace MediaBrowser.Api.Library
? new string[] { }
: request.IncludeItemTypes.Split(',');
- Func filter = i =>
+ var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
+
+ var query = new InternalItemsQuery(user)
{
- if (includeTypes.Length > 0)
- {
- if (!includeTypes.Contains(i.GetType().Name, StringComparer.OrdinalIgnoreCase))
- {
- return false;
- }
- }
-
- return true;
+ IncludeItemTypes = includeTypes,
+ Recursive = true
};
- IEnumerable items = GetAllLibraryItems(request.UserId, _userManager, _libraryManager, null, filter);
+ var items = _libraryManager.GetItemList(query);
var lookup = items
.ToLookup(i => i.ProductionYear ?? -1)
diff --git a/MediaBrowser.Api/Music/AlbumsService.cs b/MediaBrowser.Api/Music/AlbumsService.cs
index 548598d429..9628ab2319 100644
--- a/MediaBrowser.Api/Music/AlbumsService.cs
+++ b/MediaBrowser.Api/Music/AlbumsService.cs
@@ -52,10 +52,15 @@ namespace MediaBrowser.Api.Music
public object Get(GetSimilarArtists request)
{
- var result = GetSimilarItemsResult(
-
- request,
+ var dtoOptions = GetDtoOptions(request);
+ var result = SimilarItemsHelper.GetSimilarItemsResult(dtoOptions, _userManager,
+ _itemRepo,
+ _libraryManager,
+ _userDataRepository,
+ _dtoService,
+ Logger,
+ request, new[] { typeof(MusicArtist) },
SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedSerializedResultUsingCache(result);
@@ -76,44 +81,11 @@ namespace MediaBrowser.Api.Music
_userDataRepository,
_dtoService,
Logger,
- request, item => item is MusicAlbum,
+ request, new[] { typeof(MusicAlbum) },
GetAlbumSimilarityScore);
return ToOptimizedSerializedResultUsingCache(result);
}
-
- private ItemsResult GetSimilarItemsResult(BaseGetSimilarItemsFromItem request, Func, List, BaseItem, int> getSimilarityScore)
- {
- var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null;
-
- var item = string.IsNullOrEmpty(request.Id) ?
- (!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
- _libraryManager.RootFolder) : _libraryManager.GetItemById(request.Id);
-
- var inputItems = _libraryManager.GetArtists(user.RootFolder.GetRecursiveChildren(user, i => i is IHasArtist).OfType());
-
- var list = inputItems.ToList();
-
- var items = SimilarItemsHelper.GetSimilaritems(item, _libraryManager, list, getSimilarityScore).ToList();
-
- IEnumerable returnItems = items;
-
- if (request.Limit.HasValue)
- {
- returnItems = returnItems.Take(request.Limit.Value);
- }
-
- var dtoOptions = GetDtoOptions(request);
-
- var result = new ItemsResult
- {
- Items = _dtoService.GetBaseItemDtos(returnItems, dtoOptions, user).ToArray(),
-
- TotalRecordCount = items.Count
- };
-
- return result;
- }
///
/// Gets the album similarity score.
diff --git a/MediaBrowser.Api/SimilarItemsHelper.cs b/MediaBrowser.Api/SimilarItemsHelper.cs
index d114446eeb..277bba1dd1 100644
--- a/MediaBrowser.Api/SimilarItemsHelper.cs
+++ b/MediaBrowser.Api/SimilarItemsHelper.cs
@@ -54,21 +54,7 @@ namespace MediaBrowser.Api
///
public static class SimilarItemsHelper
{
- ///
- /// Gets the similar items.
- ///
- /// The dto options.
- /// The user manager.
- /// The item repository.
- /// The library manager.
- /// The user data repository.
- /// The dto service.
- /// The logger.
- /// The request.
- /// The include in search.
- /// The get similarity score.
- /// ItemsResult.
- internal static ItemsResult GetSimilarItemsResult(DtoOptions dtoOptions, IUserManager userManager, IItemRepository itemRepository, ILibraryManager libraryManager, IUserDataManager userDataRepository, IDtoService dtoService, ILogger logger, BaseGetSimilarItemsFromItem request, Func includeInSearch, Func, List, BaseItem, int> getSimilarityScore)
+ internal static ItemsResult GetSimilarItemsResult(DtoOptions dtoOptions, IUserManager userManager, IItemRepository itemRepository, ILibraryManager libraryManager, IUserDataManager userDataRepository, IDtoService dtoService, ILogger logger, BaseGetSimilarItemsFromItem request, Type[] includeTypes, Func, List, BaseItem, int> getSimilarityScore)
{
var user = !string.IsNullOrWhiteSpace(request.UserId) ? userManager.GetUserById(request.UserId) : null;
@@ -76,11 +62,13 @@ namespace MediaBrowser.Api
(!string.IsNullOrWhiteSpace(request.UserId) ? user.RootFolder :
libraryManager.RootFolder) : libraryManager.GetItemById(request.Id);
- Func filter = i => i.Id != item.Id && includeInSearch(i);
+ var query = new InternalItemsQuery(user)
+ {
+ IncludeItemTypes = includeTypes.Select(i => i.Name).ToArray(),
+ Recursive = true
+ };
- var inputItems = user == null
- ? libraryManager.RootFolder.GetRecursiveChildren(filter)
- : user.RootFolder.GetRecursiveChildren(user, filter);
+ var inputItems = libraryManager.GetItemList(query);
var items = GetSimilaritems(item, libraryManager, inputItems, getSimilarityScore)
.ToList();
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 7893ff5bd8..5b5b0a9024 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -263,7 +263,7 @@ namespace MediaBrowser.Api
_userDataManager,
_dtoService,
Logger,
- request, item => item is Series,
+ request, new[] { typeof(Series) },
SimilarItemsHelper.GetSimiliarityScore);
return ToOptimizedSerializedResultUsingCache(result);
diff --git a/MediaBrowser.Model/Dto/ItemCounts.cs b/MediaBrowser.Model/Dto/ItemCounts.cs
index c8745ebe38..e80de26b13 100644
--- a/MediaBrowser.Model/Dto/ItemCounts.cs
+++ b/MediaBrowser.Model/Dto/ItemCounts.cs
@@ -62,15 +62,5 @@ namespace MediaBrowser.Model.Dto
///
/// The book count.
public int BookCount { get; set; }
- ///
- /// Gets or sets the unique types.
- ///
- /// The unique types.
- public List UniqueTypes { get; set; }
-
- public ItemCounts()
- {
- UniqueTypes = new List();
- }
}
}