added more direct querying to folder

This commit is contained in:
Luke Pulverenti
2013-09-27 08:24:28 -04:00
parent bdc90f02f2
commit c643dd072e
25 changed files with 143 additions and 124 deletions

View File

@@ -75,7 +75,7 @@ namespace MediaBrowser.Api
var album1 = (MusicAlbum)item1;
var album2 = (MusicAlbum)item2;
var artists1 = album1.RecursiveChildren
var artists1 = album1.GetRecursiveChildren()
.OfType<Audio>()
.SelectMany(i =>
{
@@ -92,7 +92,7 @@ namespace MediaBrowser.Api
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
var artists2 = album2.RecursiveChildren
var artists2 = album2.GetRecursiveChildren()
.OfType<Audio>()
.SelectMany(i =>
{

View File

@@ -122,16 +122,16 @@ namespace MediaBrowser.Api
return libraryManager.GetPerson(DeSlugPersonName(name, libraryManager));
}
protected IEnumerable<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager)
protected IList<BaseItem> GetAllLibraryItems(Guid? userId, IUserManager userManager, ILibraryManager libraryManager)
{
if (userId.HasValue)
{
var user = userManager.GetUserById(userId.Value);
return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user);
return userManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user, null);
}
return libraryManager.RootFolder.RecursiveChildren;
return libraryManager.RootFolder.GetRecursiveChildren();
}
/// <summary>
@@ -147,7 +147,7 @@ namespace MediaBrowser.Api
return name;
}
return libraryManager.RootFolder.RecursiveChildren
return libraryManager.RootFolder.GetRecursiveChildren()
.OfType<Audio>()
.SelectMany(i =>
{
@@ -181,7 +181,7 @@ namespace MediaBrowser.Api
return name;
}
return libraryManager.RootFolder.RecursiveChildren
return libraryManager.RootFolder.GetRecursiveChildren()
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -200,8 +200,7 @@ namespace MediaBrowser.Api
return name;
}
return libraryManager.RootFolder.RecursiveChildren
.OfType<Game>()
return libraryManager.RootFolder.GetRecursiveChildren(i => i is Game)
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -223,7 +222,7 @@ namespace MediaBrowser.Api
return name;
}
return libraryManager.RootFolder.RecursiveChildren
return libraryManager.RootFolder.GetRecursiveChildren()
.SelectMany(i => i.Studios)
.Distinct(StringComparer.OrdinalIgnoreCase)
.FirstOrDefault(i =>
@@ -245,7 +244,7 @@ namespace MediaBrowser.Api
return name;
}
return libraryManager.RootFolder.RecursiveChildren
return libraryManager.RootFolder.GetRecursiveChildren()
.SelectMany(i => i.People)
.Select(i => i.Name)
.Distinct(StringComparer.OrdinalIgnoreCase)

View File

@@ -103,18 +103,7 @@ namespace MediaBrowser.Api
/// <returns>Task{IEnumerable{SearchHintResult}}.</returns>
private async Task<SearchHintResult> GetSearchHintsAsync(GetSearchHints request)
{
IEnumerable<BaseItem> inputItems;
if (request.UserId.HasValue)
{
var user = _userManager.GetUserById(request.UserId.Value);
inputItems = user.RootFolder.GetRecursiveChildren(user);
}
else
{
inputItems = _libraryManager.RootFolder.RecursiveChildren;
}
var inputItems = GetAllLibraryItems(request.UserId, _userManager, _libraryManager);
var results = await _searchEngine.GetSearchHints(inputItems, request.SearchTerm).ConfigureAwait(false);
@@ -180,21 +169,21 @@ namespace MediaBrowser.Api
{
result.Series = season.Series.Name;
result.EpisodeCount = season.RecursiveChildren.OfType<Episode>().Count();
result.EpisodeCount = season.GetRecursiveChildren(i => i is Episode).Count;
}
var series = item as Series;
if (series != null)
{
result.EpisodeCount = series.RecursiveChildren.OfType<Episode>().Count();
result.EpisodeCount = series.GetRecursiveChildren(i => i is Episode).Count;
}
var album = item as MusicAlbum;
if (album != null)
{
var songs = album.RecursiveChildren.OfType<Audio>().ToList();
var songs = album.GetRecursiveChildren().OfType<Audio>().ToList();
result.SongCount = songs.Count;

View File

@@ -104,8 +104,8 @@ namespace MediaBrowser.Api
var fields = request.GetItemFields().ToList();
var inputItems = user == null
? libraryManager.RootFolder.RecursiveChildren
: user.RootFolder.GetRecursiveChildren(user);
? libraryManager.RootFolder.GetRecursiveChildren(i => i.Id != item.Id)
: user.RootFolder.GetRecursiveChildren(user, i => i.Id != item.Id);
var items = GetSimilaritems(item, inputItems, includeInSearch, getSimilarityScore)
.ToList();
@@ -139,11 +139,7 @@ namespace MediaBrowser.Api
{
inputItems = inputItems.Where(includeInSearch);
// Avoid implicitly captured closure
var currentItem = item;
return inputItems.Where(i => i.Id != currentItem.Id)
.Select(i => new Tuple<BaseItem, int>(i, getSimilarityScore(item, i)))
return inputItems.Select(i => new Tuple<BaseItem, int>(i, getSimilarityScore(item, i)))
.Where(i => i.Item2 > 2)
.OrderByDescending(i => i.Item2)
.Select(i => i.Item1);

View File

@@ -157,10 +157,9 @@ namespace MediaBrowser.Api
var user = _userManager.GetUserById(request.UserId);
var itemsList = user.RootFolder
.GetRecursiveChildren(user)
.OfType<Series>()
.GetRecursiveChildren(user, i => i is Series)
.AsParallel()
.Select(i => GetNextUp(i, user))
.Select(i => GetNextUp((Series)i, user))
.ToList();
itemsList = itemsList

View File

@@ -98,7 +98,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetArtists request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -53,7 +53,7 @@ namespace MediaBrowser.Api.UserLibrary
/// </summary>
/// <param name="request">The request.</param>
/// <returns>Task{ItemsResult}.</returns>
protected async Task<ItemsResult> GetResult(GetItemsByName request)
protected ItemsResult GetResult(GetItemsByName request)
{
User user = null;
BaseItem item;
@@ -80,7 +80,7 @@ namespace MediaBrowser.Api.UserLibrary
}
else
{
items = request.Recursive ? folder.RecursiveChildren : folder.Children;
items = request.Recursive ? folder.GetRecursiveChildren() : folder.Children;
}
}
else
@@ -258,23 +258,6 @@ namespace MediaBrowser.Api.UserLibrary
return dto;
}
/// <summary>
/// Gets the items.
/// </summary>
/// <param name="userId">The user id.</param>
/// <returns>IEnumerable{BaseItem}.</returns>
protected IEnumerable<BaseItem> GetItems(Guid? userId)
{
if (userId.HasValue)
{
var user = UserManager.GetUserById(userId.Value);
return UserManager.GetUserById(userId.Value).RootFolder.GetRecursiveChildren(user);
}
return LibraryManager.RootFolder.RecursiveChildren;
}
}
/// <summary>

View File

@@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetGameGenres request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -93,7 +93,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetGenres request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -89,7 +89,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetMusicGenres request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -105,7 +105,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetPersons request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -94,7 +94,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetStudios request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}

View File

@@ -451,9 +451,7 @@ namespace MediaBrowser.Api.UserLibrary
if (series != null)
{
var dtos = series
.RecursiveChildren
.OfType<Episode>()
.Where(i => 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)

View File

@@ -99,7 +99,7 @@ namespace MediaBrowser.Api.UserLibrary
/// <returns>System.Object.</returns>
public object Get(GetYears request)
{
var result = GetResult(request).Result;
var result = GetResult(request);
return ToOptimizedResult(result);
}