Skip to content

Commit

Permalink
better async'ing with the api
Browse files Browse the repository at this point in the history
  • Loading branch information
LukePulverenti committed Aug 22, 2013
1 parent 5f12fe4 commit 4c4e6b5
Showing 1 changed file with 26 additions and 17 deletions.
43 changes: 26 additions & 17 deletions MediaBrowser.Api/UserLibrary/UserLibraryService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public class GetIntros : IReturn<List<string>>
/// </summary>
[Route("/Users/{UserId}/FavoriteItems/{Id}", "POST")]
[Api(Description = "Marks an item as a favorite")]
public class MarkFavoriteItem : IReturnVoid
public class MarkFavoriteItem : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand All @@ -101,7 +101,7 @@ public class MarkFavoriteItem : IReturnVoid
/// </summary>
[Route("/Users/{UserId}/FavoriteItems/{Id}", "DELETE")]
[Api(Description = "Unmarks an item as a favorite")]
public class UnmarkFavoriteItem : IReturnVoid
public class UnmarkFavoriteItem : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand All @@ -123,7 +123,7 @@ public class UnmarkFavoriteItem : IReturnVoid
/// </summary>
[Route("/Users/{UserId}/Items/{Id}/Rating", "DELETE")]
[Api(Description = "Deletes a user's saved personal rating for an item")]
public class DeleteUserItemRating : IReturnVoid
public class DeleteUserItemRating : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand All @@ -145,7 +145,7 @@ public class DeleteUserItemRating : IReturnVoid
/// </summary>
[Route("/Users/{UserId}/Items/{Id}/Rating", "POST")]
[Api(Description = "Updates a user's rating for an item")]
public class UpdateUserItemRating : IReturnVoid
public class UpdateUserItemRating : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand Down Expand Up @@ -174,7 +174,7 @@ public class UpdateUserItemRating : IReturnVoid
/// </summary>
[Route("/Users/{UserId}/PlayedItems/{Id}", "POST")]
[Api(Description = "Marks an item as played")]
public class MarkPlayedItem : IReturnVoid
public class MarkPlayedItem : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand All @@ -196,7 +196,7 @@ public class MarkPlayedItem : IReturnVoid
/// </summary>
[Route("/Users/{UserId}/PlayedItems/{Id}", "DELETE")]
[Api(Description = "Marks an item as unplayed")]
public class MarkUnplayedItem : IReturnVoid
public class MarkUnplayedItem : IReturn<UserItemDataDto>
{
/// <summary>
/// Gets or sets the user id.
Expand Down Expand Up @@ -372,7 +372,6 @@ public class UserLibraryService : BaseApiService
/// <param name="itemRepo">The item repo.</param>
/// <exception cref="System.ArgumentNullException">jsonSerializer</exception>
public UserLibraryService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, ISessionManager sessionManager)
: base()
{
_userManager = userManager;
_libraryManager = libraryManager;
Expand All @@ -387,6 +386,13 @@ public UserLibraryService(IUserManager userManager, ILibraryManager libraryManag
/// <param name="request">The request.</param>
/// <returns>System.Object.</returns>
public object Get(GetSpecialFeatures request)
{
var result = GetAsync(request);

return ToOptimizedResult(result);
}

private Task<BaseItemDto[]> GetAsync(GetSpecialFeatures request)
{
var user = _userManager.GetUserById(request.UserId);

Expand All @@ -399,14 +405,12 @@ public object Get(GetSpecialFeatures request)

var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo);

var items = movie.SpecialFeatureIds
var tasks = movie.SpecialFeatureIds
.Select(_itemRepo.RetrieveItem)
.OrderBy(i => i.SortName)
.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, movie))
.Select(t => t.Result)
.ToList();
.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, movie));

return ToOptimizedResult(items);
return Task.WhenAll(tasks);
}

/// <summary>
Expand All @@ -415,6 +419,13 @@ public object Get(GetSpecialFeatures request)
/// <param name="request">The request.</param>
/// <returns>System.Object.</returns>
public object Get(GetLocalTrailers request)
{
var result = GetAsync(request);

return ToOptimizedResult(result);
}

private Task<BaseItemDto[]> GetAsync(GetLocalTrailers request)
{
var user = _userManager.GetUserById(request.UserId);

Expand All @@ -425,14 +436,12 @@ public object Get(GetLocalTrailers request)

var dtoBuilder = new DtoBuilder(Logger, _libraryManager, _userDataRepository, _itemRepo);

var items = item.LocalTrailerIds
var tasks = item.LocalTrailerIds
.Select(_itemRepo.RetrieveItem)
.OrderBy(i => i.SortName)
.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item))
.Select(t => t.Result)
.ToList();
.Select(i => dtoBuilder.GetBaseItemDto(i, fields, user, item));

return ToOptimizedResult(items);
return Task.WhenAll(tasks);
}

/// <summary>
Expand Down

0 comments on commit 4c4e6b5

Please sign in to comment.