From 87a41bba76554ba5b2bc39fd2ccaaed53dfe180a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 22 Aug 2013 17:33:39 -0400 Subject: [PATCH] better async'ing with the api --- .../UserLibrary/UserLibraryService.cs | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 46254435fa..5c2e6c183e 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -79,7 +79,7 @@ namespace MediaBrowser.Api.UserLibrary /// [Route("/Users/{UserId}/FavoriteItems/{Id}", "POST")] [Api(Description = "Marks an item as a favorite")] - public class MarkFavoriteItem : IReturnVoid + public class MarkFavoriteItem : IReturn { /// /// Gets or sets the user id. @@ -101,7 +101,7 @@ namespace MediaBrowser.Api.UserLibrary /// [Route("/Users/{UserId}/FavoriteItems/{Id}", "DELETE")] [Api(Description = "Unmarks an item as a favorite")] - public class UnmarkFavoriteItem : IReturnVoid + public class UnmarkFavoriteItem : IReturn { /// /// Gets or sets the user id. @@ -123,7 +123,7 @@ namespace MediaBrowser.Api.UserLibrary /// [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 { /// /// Gets or sets the user id. @@ -145,7 +145,7 @@ namespace MediaBrowser.Api.UserLibrary /// [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 { /// /// Gets or sets the user id. @@ -174,7 +174,7 @@ namespace MediaBrowser.Api.UserLibrary /// [Route("/Users/{UserId}/PlayedItems/{Id}", "POST")] [Api(Description = "Marks an item as played")] - public class MarkPlayedItem : IReturnVoid + public class MarkPlayedItem : IReturn { /// /// Gets or sets the user id. @@ -196,7 +196,7 @@ namespace MediaBrowser.Api.UserLibrary /// [Route("/Users/{UserId}/PlayedItems/{Id}", "DELETE")] [Api(Description = "Marks an item as unplayed")] - public class MarkUnplayedItem : IReturnVoid + public class MarkUnplayedItem : IReturn { /// /// Gets or sets the user id. @@ -372,7 +372,6 @@ namespace MediaBrowser.Api.UserLibrary /// The item repo. /// jsonSerializer public UserLibraryService(IUserManager userManager, ILibraryManager libraryManager, IUserDataRepository userDataRepository, IItemRepository itemRepo, ISessionManager sessionManager) - : base() { _userManager = userManager; _libraryManager = libraryManager; @@ -387,6 +386,13 @@ namespace MediaBrowser.Api.UserLibrary /// The request. /// System.Object. public object Get(GetSpecialFeatures request) + { + var result = GetAsync(request); + + return ToOptimizedResult(result); + } + + private Task GetAsync(GetSpecialFeatures request) { var user = _userManager.GetUserById(request.UserId); @@ -399,14 +405,12 @@ namespace MediaBrowser.Api.UserLibrary 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); } /// @@ -415,6 +419,13 @@ namespace MediaBrowser.Api.UserLibrary /// The request. /// System.Object. public object Get(GetLocalTrailers request) + { + var result = GetAsync(request); + + return ToOptimizedResult(result); + } + + private Task GetAsync(GetLocalTrailers request) { var user = _userManager.GetUserById(request.UserId); @@ -425,14 +436,12 @@ namespace MediaBrowser.Api.UserLibrary 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); } ///