aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/UserLibraryService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs136
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()));
}
}
}