From 9427eb083f7d56ff4c429779de79f716d8bfd88a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 22 Aug 2013 17:56:19 -0400 Subject: [PATCH] return newly updated user data after modifications --- .../UserLibrary/ItemByNameUserDataService.cs | 40 +++++++++------ .../UserLibrary/UserLibraryService.cs | 50 ++++++++++++++----- MediaBrowser.Model/ApiClient/IApiClient.cs | 8 +-- Nuget/MediaBrowser.Common.Internal.nuspec | 4 +- Nuget/MediaBrowser.Common.nuspec | 2 +- Nuget/MediaBrowser.Server.Core.nuspec | 4 +- 6 files changed, 72 insertions(+), 36 deletions(-) diff --git a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs index 4196db497a..1e990b3e93 100644 --- a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs @@ -1,5 +1,7 @@ -using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; +using MediaBrowser.Model.Dto; using ServiceStack.ServiceHost; using ServiceStack.Text.Controller; using System; @@ -18,7 +20,7 @@ namespace MediaBrowser.Api.UserLibrary [Route("/Users/{UserId}/Favorites/MusicGenres/{Name}", "POST")] [Route("/Users/{UserId}/Favorites/GameGenres/{Name}", "POST")] [Api(Description = "Marks something as a favorite")] - public class MarkItemByNameFavorite : IReturnVoid + public class MarkItemByNameFavorite : IReturn { /// /// Gets or sets the user id. @@ -45,7 +47,7 @@ namespace MediaBrowser.Api.UserLibrary [Route("/Users/{UserId}/Favorites/MusicGenres/{Name}", "DELETE")] [Route("/Users/{UserId}/Favorites/GameGenres/{Name}", "DELETE")] [Api(Description = "Unmarks something as a favorite")] - public class UnmarkItemByNameFavorite : IReturnVoid + public class UnmarkItemByNameFavorite : IReturn { /// /// Gets or sets the user id. @@ -71,7 +73,7 @@ namespace MediaBrowser.Api.UserLibrary [Route("/Users/{UserId}/Ratings/Genres/{Name}", "POST")] [Route("/Users/{UserId}/Ratings/MusicGenres/{Name}", "POST")] [Api(Description = "Updates a user's rating for an item")] - public class UpdateItemByNameRating : IReturnVoid + public class UpdateItemByNameRating : IReturn { /// /// Gets or sets the user id. @@ -105,7 +107,7 @@ namespace MediaBrowser.Api.UserLibrary [Route("/Users/{UserId}/Ratings/MusicGenres/{Name}", "DELETE")] [Route("/Users/{UserId}/Ratings/GameGenres/{Name}", "DELETE")] [Api(Description = "Deletes a user's saved personal rating for an item")] - public class DeleteItemByNameRating : IReturnVoid + public class DeleteItemByNameRating : IReturn { /// /// Gets or sets the user id. @@ -152,56 +154,56 @@ namespace MediaBrowser.Api.UserLibrary /// Posts the specified request. /// /// The request. - public void Post(MarkItemByNameFavorite request) + public object Post(MarkItemByNameFavorite request) { var pathInfo = PathInfo.Parse(RequestContext.PathInfo); var type = pathInfo.GetArgumentValue(3); var task = MarkFavorite(request.UserId, type, request.Name, true); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } /// /// Posts the specified request. /// /// The request. - public void Post(UpdateItemByNameRating request) + public object Post(UpdateItemByNameRating request) { var pathInfo = PathInfo.Parse(RequestContext.PathInfo); var type = pathInfo.GetArgumentValue(3); var task = MarkLike(request.UserId, type, request.Name, request.Likes); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } /// /// Deletes the specified request. /// /// The request. - public void Delete(UnmarkItemByNameFavorite request) + public object Delete(UnmarkItemByNameFavorite request) { var pathInfo = PathInfo.Parse(RequestContext.PathInfo); var type = pathInfo.GetArgumentValue(3); var task = MarkFavorite(request.UserId, type, request.Name, false); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } /// /// Deletes the specified request. /// /// The request. - public void Delete(DeleteItemByNameRating request) + public object Delete(DeleteItemByNameRating request) { var pathInfo = PathInfo.Parse(RequestContext.PathInfo); var type = pathInfo.GetArgumentValue(3); var task = MarkLike(request.UserId, type, request.Name, null); - Task.WaitAll(task); + return ToOptimizedResult(task.Result); } /// @@ -212,7 +214,7 @@ namespace MediaBrowser.Api.UserLibrary /// The name. /// if set to true [is favorite]. /// Task. - protected async Task MarkFavorite(Guid userId, string type, string name, bool isFavorite) + protected async Task MarkFavorite(Guid userId, string type, string name, bool isFavorite) { var item = await GetItemByName(name, type, LibraryManager).ConfigureAwait(false); @@ -225,6 +227,10 @@ namespace MediaBrowser.Api.UserLibrary data.IsFavorite = isFavorite; await UserDataRepository.SaveUserData(userId, key, data, CancellationToken.None).ConfigureAwait(false); + + data = UserDataRepository.GetUserData(userId, key); + + return DtoBuilder.GetUserItemDataDto(data); } /// @@ -235,7 +241,7 @@ namespace MediaBrowser.Api.UserLibrary /// The name. /// if set to true [likes]. /// Task. - protected async Task MarkLike(Guid userId, string type, string name, bool? likes) + protected async Task MarkLike(Guid userId, string type, string name, bool? likes) { var item = await GetItemByName(name, type, LibraryManager).ConfigureAwait(false); @@ -247,6 +253,10 @@ namespace MediaBrowser.Api.UserLibrary data.Likes = likes; await UserDataRepository.SaveUserData(userId, key, data, CancellationToken.None).ConfigureAwait(false); + + data = UserDataRepository.GetUserData(userId, key); + + return DtoBuilder.GetUserItemDataDto(data); } } } diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs index 5c2e6c183e..7257f0daeb 100644 --- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs +++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs @@ -387,7 +387,7 @@ namespace MediaBrowser.Api.UserLibrary /// System.Object. public object Get(GetSpecialFeatures request) { - var result = GetAsync(request); + var result = GetAsync(request).Result; return ToOptimizedResult(result); } @@ -420,7 +420,7 @@ namespace MediaBrowser.Api.UserLibrary /// System.Object. public object Get(GetLocalTrailers request) { - var result = GetAsync(request); + var result = GetAsync(request).Result; return ToOptimizedResult(result); } @@ -506,7 +506,7 @@ namespace MediaBrowser.Api.UserLibrary /// Posts the specified request. /// /// The request. - public void Post(MarkFavoriteItem request) + public object Post(MarkFavoriteItem request) { var user = _userManager.GetUserById(request.UserId); @@ -523,13 +523,19 @@ namespace MediaBrowser.Api.UserLibrary var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); Task.WaitAll(task); + + data = _userDataRepository.GetUserData(user.Id, key); + + var dto = DtoBuilder.GetUserItemDataDto(data); + + return ToOptimizedResult(dto); } /// /// Deletes the specified request. /// /// The request. - public void Delete(UnmarkFavoriteItem request) + public object Delete(UnmarkFavoriteItem request) { var user = _userManager.GetUserById(request.UserId); @@ -546,13 +552,19 @@ namespace MediaBrowser.Api.UserLibrary var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); Task.WaitAll(task); + + data = _userDataRepository.GetUserData(user.Id, key); + + var dto = DtoBuilder.GetUserItemDataDto(data); + + return ToOptimizedResult(dto); } /// /// Deletes the specified request. /// /// The request. - public void Delete(DeleteUserItemRating request) + public object Delete(DeleteUserItemRating request) { var user = _userManager.GetUserById(request.UserId); @@ -568,13 +580,19 @@ namespace MediaBrowser.Api.UserLibrary var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); Task.WaitAll(task); + + data = _userDataRepository.GetUserData(user.Id, key); + + var dto = DtoBuilder.GetUserItemDataDto(data); + + return ToOptimizedResult(dto); } /// /// Posts the specified request. /// /// The request. - public void Post(UpdateUserItemRating request) + public object Post(UpdateUserItemRating request) { var user = _userManager.GetUserById(request.UserId); @@ -590,19 +608,25 @@ namespace MediaBrowser.Api.UserLibrary var task = _userDataRepository.SaveUserData(user.Id, key, data, CancellationToken.None); Task.WaitAll(task); + + data = _userDataRepository.GetUserData(user.Id, key); + + var dto = DtoBuilder.GetUserItemDataDto(data); + + return ToOptimizedResult(dto); } /// /// Posts the specified request. /// /// The request. - 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() @@ -669,13 +693,13 @@ namespace MediaBrowser.Api.UserLibrary /// Deletes the specified request. /// /// The request. - 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); } /// @@ -685,11 +709,13 @@ namespace MediaBrowser.Api.UserLibrary /// The item id. /// if set to true [was played]. /// Task. - private Task UpdatePlayedStatus(User user, string itemId, bool wasPlayed) + private async Task 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())); } } } diff --git a/MediaBrowser.Model/ApiClient/IApiClient.cs b/MediaBrowser.Model/ApiClient/IApiClient.cs index ecb13f83ab..f919c2c838 100644 --- a/MediaBrowser.Model/ApiClient/IApiClient.cs +++ b/MediaBrowser.Model/ApiClient/IApiClient.cs @@ -437,7 +437,7 @@ namespace MediaBrowser.Model.ApiClient /// if set to true [was played]. /// Task. /// itemId - Task UpdatePlayedStatusAsync(string itemId, string userId, bool wasPlayed); + Task UpdatePlayedStatusAsync(string itemId, string userId, bool wasPlayed); /// /// Updates the favorite status async. @@ -447,7 +447,7 @@ namespace MediaBrowser.Model.ApiClient /// if set to true [is favorite]. /// Task. /// itemId - Task UpdateFavoriteStatusAsync(string itemId, string userId, bool isFavorite); + Task UpdateFavoriteStatusAsync(string itemId, string userId, bool isFavorite); /// /// Reports to the server that the user has begun playing an item @@ -518,7 +518,7 @@ namespace MediaBrowser.Model.ApiClient /// The user id. /// Task{UserItemDataDto}. /// itemId - Task ClearUserItemRatingAsync(string itemId, string userId); + Task ClearUserItemRatingAsync(string itemId, string userId); /// /// Updates a user's rating for an item, based on likes or dislikes @@ -528,7 +528,7 @@ namespace MediaBrowser.Model.ApiClient /// if set to true [likes]. /// Task. /// itemId - Task UpdateUserItemRatingAsync(string itemId, string userId, bool likes); + Task UpdateUserItemRatingAsync(string itemId, string userId, bool likes); /// /// Authenticates a user and returns the result diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index f1c8251b2b..8bfd28da18 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.183 + 3.0.184 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 0f334c9c16..2ec4ebd585 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.183 + 3.0.184 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index bcf772e8f8..14a401282f 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.183 + 3.0.184 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +