From 374b7f2f039211d5a8fb80348b72070841f393ec Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 22 Apr 2013 00:38:03 -0400 Subject: new Artist entity --- .../UserLibrary/ItemByNameUserDataService.cs | 166 ++++++++++++++------- 1 file changed, 111 insertions(+), 55 deletions(-) (limited to 'MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs') diff --git a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs index e068eb216..a3f36afe9 100644 --- a/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemByNameUserDataService.cs @@ -1,38 +1,21 @@ -using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using ServiceStack.ServiceHost; +using ServiceStack.Text.Controller; using System; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Api.UserLibrary { - /// - /// Class GetItemByNameUserData - /// - [Route("/Users/{UserId}/ItemsByName/{Name}/UserData", "GET")] - [Api(Description = "Gets user data for an item")] - public class GetItemByNameUserData : IReturnVoid - { - /// - /// Gets or sets the user id. - /// - /// The user id. - [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public Guid UserId { get; set; } - - /// - /// Gets or sets the name. - /// - /// The name. - [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist, album)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } - } - /// /// Class MarkItemByNameFavorite /// - [Route("/Users/{UserId}/ItemsByName/Favorites/{Name}", "POST")] + [Route("/Users/{UserId}/Favorites/Artists/{Name}", "POST")] + [Route("/Users/{UserId}/Favorites/Persons/{Name}", "POST")] + [Route("/Users/{UserId}/Favorites/Studios/{Name}", "POST")] + [Route("/Users/{UserId}/Favorites/Genres/{Name}", "POST")] [Api(Description = "Marks something as a favorite")] public class MarkItemByNameFavorite : IReturnVoid { @@ -47,14 +30,17 @@ namespace MediaBrowser.Api.UserLibrary /// Gets or sets the name. /// /// The name. - [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist, album)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + [ApiMember(Name = "Name", Description = "The name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] public string Name { get; set; } } /// /// Class UnmarkItemByNameFavorite /// - [Route("/Users/{UserId}/ItemsByName/Favorites/{Name}", "DELETE")] + [Route("/Users/{UserId}/Favorites/Artists/{Name}", "DELETE")] + [Route("/Users/{UserId}/Favorites/Persons/{Name}", "DELETE")] + [Route("/Users/{UserId}/Favorites/Studios/{Name}", "DELETE")] + [Route("/Users/{UserId}/Favorites/Genres/{Name}", "DELETE")] [Api(Description = "Unmarks something as a favorite")] public class UnmarkItemByNameFavorite : IReturnVoid { @@ -69,11 +55,17 @@ namespace MediaBrowser.Api.UserLibrary /// Gets or sets the name. /// /// The name. - [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist, album)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] + [ApiMember(Name = "Name", Description = "The name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] public string Name { get; set; } } - [Route("/Users/{UserId}/ItemsByName/{Name}/Rating", "POST")] + /// + /// Class UpdateItemByNameRating + /// + [Route("/Users/{UserId}/Ratings/Artists/{Name}", "POST")] + [Route("/Users/{UserId}/Ratings/Persons/{Name}", "POST")] + [Route("/Users/{UserId}/Ratings/Studios/{Name}", "POST")] + [Route("/Users/{UserId}/Ratings/Genres/{Name}", "POST")] [Api(Description = "Updates a user's rating for an item")] public class UpdateItemByNameRating : IReturnVoid { @@ -88,7 +80,7 @@ namespace MediaBrowser.Api.UserLibrary /// Gets or sets the name. /// /// The name. - [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist, album)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + [ApiMember(Name = "Name", Description = "The name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] public string Name { get; set; } /// @@ -99,7 +91,13 @@ namespace MediaBrowser.Api.UserLibrary public bool Likes { get; set; } } - [Route("/Users/{UserId}/ItemsByName/{Name}/Rating", "DELETE")] + /// + /// Class DeleteItemByNameRating + /// + [Route("/Users/{UserId}/Ratings/Artists/{Name}", "DELETE")] + [Route("/Users/{UserId}/Ratings/Persons/{Name}", "DELETE")] + [Route("/Users/{UserId}/Ratings/Studios/{Name}", "DELETE")] + [Route("/Users/{UserId}/Ratings/Genres/{Name}", "DELETE")] [Api(Description = "Deletes a user's saved personal rating for an item")] public class DeleteItemByNameRating : IReturnVoid { @@ -114,10 +112,10 @@ namespace MediaBrowser.Api.UserLibrary /// Gets or sets the name. /// /// The name. - [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist, album)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] + [ApiMember(Name = "Name", Description = "The item name (genre, person, year, studio, artist)", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] public string Name { get; set; } } - + /// /// Class ItemByNameUserDataService /// @@ -128,35 +126,32 @@ namespace MediaBrowser.Api.UserLibrary /// protected readonly IUserDataRepository UserDataRepository; + /// + /// The library manager + /// + protected readonly ILibraryManager LibraryManager; + /// /// Initializes a new instance of the class. /// /// The user data repository. - public ItemByNameUserDataService(IUserDataRepository userDataRepository) + /// The library manager. + public ItemByNameUserDataService(IUserDataRepository userDataRepository, ILibraryManager libraryManager) { UserDataRepository = userDataRepository; + LibraryManager = libraryManager; } - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetItemByNameUserData request) - { - // Get the user data for this item - var data = UserDataRepository.GetUserData(request.UserId, request.Name).Result; - - return ToOptimizedResult(DtoBuilder.GetUserItemDataDto(data)); - } - /// /// Posts the specified request. /// /// The request. public void Post(MarkItemByNameFavorite request) { - var task = MarkFavorite(request.UserId, request.Name, true); + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(3); + + var task = MarkFavorite(request.UserId, type, request.Name, true); Task.WaitAll(task); } @@ -167,18 +162,24 @@ namespace MediaBrowser.Api.UserLibrary /// The request. public void Post(UpdateItemByNameRating request) { - var task = MarkLike(request.UserId, request.Name, request.Likes); + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(3); + + var task = MarkLike(request.UserId, type, request.Name, request.Likes); Task.WaitAll(task); } - + /// /// Deletes the specified request. /// /// The request. public void Delete(UnmarkItemByNameFavorite request) { - var task = MarkFavorite(request.UserId, request.Name, false); + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(3); + + var task = MarkFavorite(request.UserId, type, request.Name, false); Task.WaitAll(task); } @@ -189,7 +190,10 @@ namespace MediaBrowser.Api.UserLibrary /// The request. public void Delete(DeleteItemByNameRating request) { - var task = MarkLike(request.UserId, request.Name, null); + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(3); + + var task = MarkLike(request.UserId, type, request.Name, null); Task.WaitAll(task); } @@ -198,11 +202,37 @@ namespace MediaBrowser.Api.UserLibrary /// Marks the favorite. /// /// The user id. - /// The key. + /// The type. + /// The name. /// if set to true [is favorite]. /// Task. - protected async Task MarkFavorite(Guid userId, string key, bool isFavorite) + protected async Task MarkFavorite(Guid userId, string type, string name, bool isFavorite) { + BaseItem item; + + if (string.Equals(type, "Persons")) + { + item = await LibraryManager.GetPerson(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Artists")) + { + item = await LibraryManager.GetArtist(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Genres")) + { + item = await LibraryManager.GetGenre(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Studios")) + { + item = await LibraryManager.GetStudio(name).ConfigureAwait(false); + } + else + { + throw new ArgumentException(); + } + + var key = item.GetUserDataKey(); + // Get the user data for this item var data = await UserDataRepository.GetUserData(userId, key).ConfigureAwait(false); @@ -216,11 +246,37 @@ namespace MediaBrowser.Api.UserLibrary /// Marks the like. /// /// The user id. - /// The key. + /// The type. + /// The name. /// if set to true [likes]. /// Task. - protected async Task MarkLike(Guid userId, string key, bool? likes) + protected async Task MarkLike(Guid userId, string type, string name, bool? likes) { + BaseItem item; + + if (string.Equals(type, "Persons")) + { + item = await LibraryManager.GetPerson(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Artists")) + { + item = await LibraryManager.GetArtist(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Genres")) + { + item = await LibraryManager.GetGenre(name).ConfigureAwait(false); + } + else if (string.Equals(type, "Studios")) + { + item = await LibraryManager.GetStudio(name).ConfigureAwait(false); + } + else + { + throw new ArgumentException(); + } + + var key = item.GetUserDataKey(); + // Get the user data for this item var data = await UserDataRepository.GetUserData(userId, key).ConfigureAwait(false); -- cgit v1.2.3