From c411fdc93a2811af4fba11319e6642211465f568 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 3 Aug 2013 10:38:56 -0400 Subject: added methods to edit ibn images --- MediaBrowser.Api/Images/ImageService.cs | 356 ++++++++++++++++++-------------- 1 file changed, 196 insertions(+), 160 deletions(-) (limited to 'MediaBrowser.Api/Images/ImageService.cs') diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index e7b4a42c9e..678f89c2c1 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -1,12 +1,9 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Extensions; -using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; @@ -39,6 +36,23 @@ namespace MediaBrowser.Api.Images public string Id { get; set; } } + [Route("/Artists/{Name}/Images", "GET")] + [Route("/Genres/{Name}/Images", "GET")] + [Route("/GameGenres/{Name}/Images", "GET")] + [Route("/MusicGenres/{Name}/Images", "GET")] + [Route("/Persons/{Name}/Images", "GET")] + [Route("/Studios/{Name}/Images", "GET")] + [Api(Description = "Gets information about an item's images")] + public class GetItemByNameImageInfos : IReturn> + { + /// + /// Gets or sets the id. + /// + /// The id. + [ApiMember(Name = "Name", Description = "Name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public string Name { get; set; } + } + [Route("/Items/{Id}/Images/{Type}", "GET")] [Route("/Items/{Id}/Images/{Type}/{Index}", "GET")] [Api(Description = "Gets an item image")] @@ -88,142 +102,128 @@ namespace MediaBrowser.Api.Images public int NewIndex { get; set; } } - /// - /// Class DeleteItemImage - /// - [Route("/Items/{Id}/Images/{Type}", "DELETE")] - [Route("/Items/{Id}/Images/{Type}/{Index}", "DELETE")] - [Api(Description = "Deletes an item image")] - public class DeleteItemImage : DeleteImageRequest, IReturnVoid + [Route("/Artists/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/Genres/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/GameGenres/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/MusicGenres/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/Persons/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/Studios/{Name}/Images/{Type}/{Index}/Index", "POST")] + [Route("/Years/{Year}/Images/{Type}/{Index}/Index", "POST")] + [Api(Description = "Updates the index for an item image")] + public class UpdateItemByNameImageIndex : IReturnVoid { /// /// Gets or sets the id. /// /// The id. - [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public Guid Id { get; set; } - } + [ApiMember(Name = "Name", Description = "Item name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Name { get; set; } - /// - /// Class GetPersonImage - /// - [Route("/Persons/{Name}/Images/{Type}", "GET")] - [Route("/Persons/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a person image")] - public class GetPersonImage : ImageRequest - { /// - /// Gets or sets the name. + /// Gets or sets the type of the image. /// - /// The name. - [ApiMember(Name = "Name", Description = "Person name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } - } + /// The type of the image. + [ApiMember(Name = "Type", Description = "Image Type", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public ImageType Type { get; set; } - /// - /// Class GetArtistImage - /// - [Route("/Artists/{Name}/Images/{Type}", "GET")] - [Route("/Artists/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets an artist image")] - public class GetArtistImage : ImageRequest - { /// - /// Gets or sets the name. + /// Gets or sets the index. /// - /// The name. - [ApiMember(Name = "Name", Description = "Artist name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } - } + /// The index. + [ApiMember(Name = "Index", Description = "Image Index", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "POST")] + public int Index { get; set; } - /// - /// Class GetStudioImage - /// - [Route("/Studios/{Name}/Images/{Type}", "GET")] - [Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a studio image")] - public class GetStudioImage : ImageRequest - { /// - /// Gets or sets the name. + /// Gets or sets the new index. /// - /// The name. - [ApiMember(Name = "Name", Description = "Studio name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } + /// The new index. + [ApiMember(Name = "NewIndex", Description = "The new image index", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "GET")] + public int NewIndex { get; set; } } - + /// - /// Class GetGenreImage + /// Class GetPersonImage /// + [Route("/Artists/{Name}/Images/{Type}", "GET")] + [Route("/Artists/{Name}/Images/{Type}/{Index}", "GET")] [Route("/Genres/{Name}/Images/{Type}", "GET")] [Route("/Genres/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a genre image")] - public class GetGenreImage : ImageRequest - { - /// - /// Gets or sets the name. - /// - /// The name. - [ApiMember(Name = "Name", Description = "Genre name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } - } - + [Route("/GameGenres/{Name}/Images/{Type}", "GET")] + [Route("/GameGenres/{Name}/Images/{Type}/{Index}", "GET")] [Route("/MusicGenres/{Name}/Images/{Type}", "GET")] [Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a genre image")] - public class GetMusicGenreImage : ImageRequest + [Route("/Persons/{Name}/Images/{Type}", "GET")] + [Route("/Persons/{Name}/Images/{Type}/{Index}", "GET")] + [Route("/Studios/{Name}/Images/{Type}", "GET")] + [Route("/Studios/{Name}/Images/{Type}/{Index}", "GET")] + [Route("/Years/{Year}/Images/{Type}", "GET")] + [Route("/Years/{Year}/Images/{Type}/{Index}", "GET")] + [Api(Description = "Gets an item by name image")] + public class GetItemByNameImage : ImageRequest { /// /// Gets or sets the name. /// /// The name. - [ApiMember(Name = "Name", Description = "Genre name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + [ApiMember(Name = "Name", Description = "Item name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string Name { get; set; } } - [Route("/GameGenres/{Name}/Images/{Type}", "GET")] - [Route("/GameGenres/{Name}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a genre image")] - public class GetGameGenreImage : ImageRequest + /// + /// Class GetUserImage + /// + [Route("/Users/{Id}/Images/{Type}", "GET")] + [Route("/Users/{Id}/Images/{Type}/{Index}", "GET")] + [Api(Description = "Gets a user image")] + public class GetUserImage : ImageRequest { /// - /// Gets or sets the name. + /// Gets or sets the id. /// - /// The name. - [ApiMember(Name = "Name", Description = "Genre name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public string Name { get; set; } + /// The id. + [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] + public Guid Id { get; set; } } /// - /// Class GetYearImage + /// Class DeleteItemImage /// - [Route("/Years/{Year}/Images/{Type}", "GET")] - [Route("/Years/{Year}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a year image")] - public class GetYearImage : ImageRequest + [Route("/Items/{Id}/Images/{Type}", "DELETE")] + [Route("/Items/{Id}/Images/{Type}/{Index}", "DELETE")] + [Api(Description = "Deletes an item image")] + public class DeleteItemImage : DeleteImageRequest, IReturnVoid { /// - /// Gets or sets the year. + /// Gets or sets the id. /// - /// The year. - [ApiMember(Name = "Year", Description = "Year", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")] - public int Year { get; set; } + /// The id. + [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] + public Guid Id { get; set; } } - /// - /// Class GetUserImage - /// - [Route("/Users/{Id}/Images/{Type}", "GET")] - [Route("/Users/{Id}/Images/{Type}/{Index}", "GET")] - [Api(Description = "Gets a user image")] - public class GetUserImage : ImageRequest + [Route("/Artists/{Name}/Images/{Type}", "DELETE")] + [Route("/Artists/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/Genres/{Name}/Images/{Type}", "DELETE")] + [Route("/Genres/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/GameGenres/{Name}/Images/{Type}", "DELETE")] + [Route("/GameGenres/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/MusicGenres/{Name}/Images/{Type}", "DELETE")] + [Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/Persons/{Name}/Images/{Type}", "DELETE")] + [Route("/Persons/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/Studios/{Name}/Images/{Type}", "DELETE")] + [Route("/Studios/{Name}/Images/{Type}/{Index}", "DELETE")] + [Route("/Years/{Year}/Images/{Type}", "DELETE")] + [Route("/Years/{Year}/Images/{Type}/{Index}", "DELETE")] + [Api(Description = "Deletes an item image")] + public class DeleteItemByNameImage : DeleteImageRequest, IReturnVoid { /// /// Gets or sets the id. /// /// The id. - [ApiMember(Name = "Id", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] - public Guid Id { get; set; } + [ApiMember(Name = "Name", Description = "Item name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] + public string Name { get; set; } } /// @@ -286,6 +286,37 @@ namespace MediaBrowser.Api.Images public Stream RequestStream { get; set; } } + [Route("/Artists/{Name}/Images/{Type}", "POST")] + [Route("/Artists/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/Genres/{Name}/Images/{Type}", "POST")] + [Route("/Genres/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/GameGenres/{Name}/Images/{Type}", "POST")] + [Route("/GameGenres/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/MusicGenres/{Name}/Images/{Type}", "POST")] + [Route("/MusicGenres/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/Persons/{Name}/Images/{Type}", "POST")] + [Route("/Persons/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/Studios/{Name}/Images/{Type}", "POST")] + [Route("/Studios/{Name}/Images/{Type}/{Index}", "POST")] + [Route("/Years/{Year}/Images/{Type}", "POST")] + [Route("/Years/{Year}/Images/{Type}/{Index}", "POST")] + [Api(Description = "Posts an item image")] + public class PostItemByNameImage : DeleteImageRequest, IRequiresRequestStream, IReturnVoid + { + /// + /// Gets or sets the id. + /// + /// The id. + [ApiMember(Name = "Name", Description = "Item name", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + public string Name { get; set; } + + /// + /// The raw Http Request Input Stream + /// + /// The request stream. + public Stream RequestStream { get; set; } + } + /// /// Class ImageService /// @@ -306,7 +337,7 @@ namespace MediaBrowser.Api.Images private readonly IProviderManager _providerManager; private readonly IItemRepository _itemRepo; - + /// /// Initializes a new instance of the class. /// @@ -337,6 +368,28 @@ namespace MediaBrowser.Api.Images return ToOptimizedResult(result); } + public object Get(GetItemByNameImageInfos request) + { + var result = GetItemByNameImageInfos(request).Result; + + return ToOptimizedResult(result); + } + + /// + /// Gets the item by name image infos. + /// + /// The request. + /// Task{List{ImageInfo}}. + public async Task> GetItemByNameImageInfos(GetItemByNameImageInfos request) + { + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(0); + + var item = await GetItemByName(request.Name, type, _libraryManager).ConfigureAwait(false); + + return await GetItemImageInfos(item).ConfigureAwait(false); + } + /// /// Gets the item image infos. /// @@ -476,98 +529,49 @@ namespace MediaBrowser.Api.Images return GetImage(request, item); } - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetYearImage request) - { - var item = _libraryManager.GetYear(request.Year).Result; - - return GetImage(request, item); - } - - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetStudioImage request) + public object Get(GetItemByNameImage request) { - var item = GetStudio(request.Name, _libraryManager).Result; - - return GetImage(request, item); - } + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(0); - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetPersonImage request) - { - var item = GetPerson(request.Name, _libraryManager).Result; + var item = GetItemByName(request.Name, type, _libraryManager).Result; return GetImage(request, item); } /// - /// Gets the specified request. + /// Posts the specified request. /// /// The request. - /// System.Object. - public object Get(GetArtistImage request) + public void Post(PostUserImage request) { - var item = GetArtist(request.Name, _libraryManager).Result; - - return GetImage(request, item); - } + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var id = new Guid(pathInfo.GetArgumentValue(1)); - /// - /// Gets the specified request. - /// - /// The request. - /// System.Object. - public object Get(GetGenreImage request) - { - var item = GetGenre(request.Name, _libraryManager).Result; + request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue(3), true); - return GetImage(request, item); - } + var item = _userManager.Users.First(i => i.Id == id); - public object Get(GetMusicGenreImage request) - { - var item = GetMusicGenre(request.Name, _libraryManager).Result; + var task = PostImage(item, request.RequestStream, request.Type, RequestContext.ContentType); - return GetImage(request, item); + Task.WaitAll(task); } - public object Get(GetGameGenreImage request) - { - var item = GetGameGenre(request.Name, _libraryManager).Result; - - return GetImage(request, item); - } - - /// - /// Posts the specified request. - /// - /// The request. - public void Post(PostUserImage request) + public void Post(PostItemByNameImage request) { var pathInfo = PathInfo.Parse(RequestContext.PathInfo); - var id = new Guid(pathInfo.GetArgumentValue(1)); + var type = pathInfo.GetArgumentValue(0); + var name = pathInfo.GetArgumentValue(1); request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue(3), true); - var item = _userManager.Users.First(i => i.Id == id); + var item = GetItemByName(name, type, _libraryManager).Result; var task = PostImage(item, request.RequestStream, request.Type, RequestContext.ContentType); Task.WaitAll(task); } - + /// /// Posts the specified request. /// @@ -612,6 +616,22 @@ namespace MediaBrowser.Api.Images Task.WaitAll(task); } + /// + /// Deletes the specified request. + /// + /// The request. + public void Delete(DeleteItemByNameImage request) + { + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(0); + + var item = GetItemByName(request.Name, type, _libraryManager).Result; + + var task = item.DeleteImage(request.Type, request.Index); + + Task.WaitAll(task); + } + /// /// Posts the specified request. /// @@ -625,6 +645,22 @@ namespace MediaBrowser.Api.Images Task.WaitAll(task); } + /// + /// Posts the specified request. + /// + /// The request. + public void Post(UpdateItemByNameImageIndex request) + { + var pathInfo = PathInfo.Parse(RequestContext.PathInfo); + var type = pathInfo.GetArgumentValue(0); + + var item = GetItemByName(request.Name, type, _libraryManager).Result; + + var task = UpdateItemIndex(item, request.Type, request.Index, request.NewIndex); + + Task.WaitAll(task); + } + /// /// Updates the index of the item. /// -- cgit v1.2.3