diff options
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/UserLibraryService.cs')
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/UserLibraryService.cs | 136 |
1 files changed, 71 insertions, 65 deletions
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 46254435f..304ff27d0 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -79,7 +79,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -101,7 +101,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -123,7 +123,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -145,7 +145,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -174,7 +174,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -196,7 +196,7 @@ namespace MediaBrowser.Api.UserLibrary /// </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. @@ -372,7 +372,6 @@ namespace MediaBrowser.Api.UserLibrary /// <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; @@ -388,6 +387,13 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetSpecialFeatures request) { + var result = GetAsync(request).Result; + + return ToOptimizedResult(result); + } + + private Task<BaseItemDto[]> GetAsync(GetSpecialFeatures request) + { var user = _userManager.GetUserById(request.UserId); var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); @@ -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); } /// <summary> @@ -416,6 +420,13 @@ namespace MediaBrowser.Api.UserLibrary /// <returns>System.Object.</returns> public object Get(GetLocalTrailers request) { + var result = GetAsync(request).Result; + + return ToOptimizedResult(result); + } + + private Task<BaseItemDto[]> GetAsync(GetLocalTrailers request) + { var user = _userManager.GetUserById(request.UserId); var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); @@ -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); } /// <summary> @@ -497,34 +506,29 @@ namespace MediaBrowser.Api.UserLibrary /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(MarkFavoriteItem request) + public object Post(MarkFavoriteItem request) { - var user = _userManager.GetUserById(request.UserId); + var dto = MarkFavorite(request.UserId, request.Id, true).Result; - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); - - // Get the user data for this item - var key = item.GetUserDataKey(); - - var data = _userDataRepository.GetUserData(user.Id, key); - - // Set favorite status - data.IsFavorite = true; - - var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); - - Task.WaitAll(task); + return ToOptimizedResult(dto); } /// <summary> /// Deletes the specified request. /// </summary> /// <param name="request">The request.</param> - public void Delete(UnmarkFavoriteItem request) + public object Delete(UnmarkFavoriteItem request) { - var user = _userManager.GetUserById(request.UserId); + var dto = MarkFavorite(request.UserId, request.Id, false).Result; - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + return ToOptimizedResult(dto); + } + + private async Task<UserItemDataDto> MarkFavorite(Guid userId, string itemId, bool isFavorite) + { + var user = _userManager.GetUserById(userId); + + var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); var key = item.GetUserDataKey(); @@ -532,68 +536,68 @@ namespace MediaBrowser.Api.UserLibrary var data = _userDataRepository.GetUserData(user.Id, key); // Set favorite status - data.IsFavorite = false; + data.IsFavorite = isFavorite; - var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); + await _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None).ConfigureAwait(false); - Task.WaitAll(task); + data = _userDataRepository.GetUserData(user.Id, key); + + return DtoBuilder.GetUserItemDataDto(data); } /// <summary> /// Deletes the specified request. /// </summary> /// <param name="request">The request.</param> - public void Delete(DeleteUserItemRating request) + public object Delete(DeleteUserItemRating request) { - var user = _userManager.GetUserById(request.UserId); - - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); - - var key = item.GetUserDataKey(); - - // Get the user data for this item - var data = _userDataRepository.GetUserData(user.Id, key); - - data.Rating = null; - - var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); + var dto = UpdateUserItemRating(request.UserId, request.Id, null).Result; - Task.WaitAll(task); + return ToOptimizedResult(dto); } /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(UpdateUserItemRating request) + public object Post(UpdateUserItemRating request) { - var user = _userManager.GetUserById(request.UserId); + var dto = UpdateUserItemRating(request.UserId, request.Id, request.Likes).Result; - var item = string.IsNullOrEmpty(request.Id) ? user.RootFolder : DtoBuilder.GetItemByClientId(request.Id, _userManager, _libraryManager, user.Id); + return ToOptimizedResult(dto); + } + + private async Task<UserItemDataDto> UpdateUserItemRating(Guid userId, string itemId, bool? likes) + { + var user = _userManager.GetUserById(userId); + + var item = string.IsNullOrEmpty(itemId) ? user.RootFolder : DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); var key = item.GetUserDataKey(); // Get the user data for this item var data = _userDataRepository.GetUserData(user.Id, key); - data.Likes = request.Likes; + data.Likes = likes; - var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); + await _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None).ConfigureAwait(false); - Task.WaitAll(task); - } + data = _userDataRepository.GetUserData(user.Id, key); + return DtoBuilder.GetUserItemDataDto(data); + } + /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(MarkPlayedItem request) + public object Post(MarkPlayedItem request) { var user = _userManager.GetUserById(request.UserId); var task = UpdatePlayedStatus(user, request.Id, true); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } private SessionInfo GetSession() @@ -660,13 +664,13 @@ namespace MediaBrowser.Api.UserLibrary /// Deletes the specified request. /// </summary> /// <param name="request">The request.</param> - public void Delete(MarkUnplayedItem request) + public object Delete(MarkUnplayedItem request) { var user = _userManager.GetUserById(request.UserId); var task = UpdatePlayedStatus(user, request.Id, false); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } /// <summary> @@ -676,11 +680,13 @@ namespace MediaBrowser.Api.UserLibrary /// <param name="itemId">The item id.</param> /// <param name="wasPlayed">if set to <c>true</c> [was played].</param> /// <returns>Task.</returns> - private Task UpdatePlayedStatus(User user, string itemId, bool wasPlayed) + private async Task<UserItemDataDto> UpdatePlayedStatus(User user, string itemId, bool wasPlayed) { var item = DtoBuilder.GetItemByClientId(itemId, _userManager, _libraryManager, user.Id); - return item.SetPlayedStatus(user, wasPlayed, _userDataRepository); + await item.SetPlayedStatus(user, wasPlayed, _userDataRepository).ConfigureAwait(false); + + return DtoBuilder.GetUserItemDataDto(_userDataRepository.GetUserData(user.Id, item.GetUserDataKey())); } } } |
