CollectionService.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using MediaBrowser.Controller.Collections;
  2. using MediaBrowser.Controller.Dto;
  3. using MediaBrowser.Controller.Net;
  4. using MediaBrowser.Model.Collections;
  5. using MediaBrowser.Model.Querying;
  6. using ServiceStack;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Api.Movies
  12. {
  13. [Route("/Collections", "POST", Summary = "Creates a new collection")]
  14. public class CreateCollection : IReturn<CollectionCreationResult>
  15. {
  16. [ApiMember(Name = "IsLocked", Description = "Whether or not to lock the new collection.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")]
  17. public bool IsLocked { get; set; }
  18. [ApiMember(Name = "Name", Description = "The name of the new collection.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
  19. public string Name { get; set; }
  20. [ApiMember(Name = "ParentId", Description = "Optional - create the collection within a specific folder", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
  21. public Guid? ParentId { get; set; }
  22. [ApiMember(Name = "Ids", Description = "Item Ids to add to the collection", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST", AllowMultiple = true)]
  23. public string Ids { get; set; }
  24. }
  25. [Route("/Collections/{Id}/Items", "POST", Summary = "Adds items to a collection")]
  26. public class AddToCollection : IReturnVoid
  27. {
  28. [ApiMember(Name = "Ids", Description = "Item id, comma delimited", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
  29. public string Ids { get; set; }
  30. [ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
  31. public Guid Id { get; set; }
  32. }
  33. [Route("/Collections/{Id}/Items", "DELETE", Summary = "Removes items from a collection")]
  34. public class RemoveFromCollection : IReturnVoid
  35. {
  36. [ApiMember(Name = "Ids", Description = "Item id, comma delimited", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
  37. public string Ids { get; set; }
  38. [ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
  39. public Guid Id { get; set; }
  40. }
  41. [Authenticated]
  42. public class CollectionService : BaseApiService
  43. {
  44. private readonly ICollectionManager _collectionManager;
  45. private readonly IDtoService _dtoService;
  46. public CollectionService(ICollectionManager collectionManager, IDtoService dtoService)
  47. {
  48. _collectionManager = collectionManager;
  49. _dtoService = dtoService;
  50. }
  51. public async Task<object> Post(CreateCollection request)
  52. {
  53. var item = await _collectionManager.CreateCollection(new CollectionCreationOptions
  54. {
  55. IsLocked = request.IsLocked,
  56. Name = request.Name,
  57. ParentId = request.ParentId,
  58. ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).Select(i => new Guid(i)).ToList()
  59. }).ConfigureAwait(false);
  60. var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>());
  61. return ToOptimizedResult(new CollectionCreationResult
  62. {
  63. Id = dto.Id
  64. });
  65. }
  66. public void Post(AddToCollection request)
  67. {
  68. var task = _collectionManager.AddToCollection(request.Id, request.Ids.Split(',').Select(i => new Guid(i)));
  69. Task.WaitAll(task);
  70. }
  71. public void Delete(RemoveFromCollection request)
  72. {
  73. var task = _collectionManager.RemoveFromCollection(request.Id, request.Ids.Split(',').Select(i => new Guid(i)));
  74. Task.WaitAll(task);
  75. }
  76. }
  77. }