aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Movies/CollectionService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Movies/CollectionService.cs')
-rw-r--r--MediaBrowser.Api/Movies/CollectionService.cs104
1 files changed, 104 insertions, 0 deletions
diff --git a/MediaBrowser.Api/Movies/CollectionService.cs b/MediaBrowser.Api/Movies/CollectionService.cs
new file mode 100644
index 0000000000..e9629439de
--- /dev/null
+++ b/MediaBrowser.Api/Movies/CollectionService.cs
@@ -0,0 +1,104 @@
+using System;
+using MediaBrowser.Controller.Collections;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Net;
+using MediaBrowser.Model.Collections;
+using MediaBrowser.Model.Services;
+using Microsoft.Extensions.Logging;
+
+namespace MediaBrowser.Api.Movies
+{
+ [Route("/Collections", "POST", Summary = "Creates a new collection")]
+ public class CreateCollection : IReturn<CollectionCreationResult>
+ {
+ [ApiMember(Name = "IsLocked", Description = "Whether or not to lock the new collection.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")]
+ public bool IsLocked { get; set; }
+
+ [ApiMember(Name = "Name", Description = "The name of the new collection.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string Name { get; set; }
+
+ [ApiMember(Name = "ParentId", Description = "Optional - create the collection within a specific folder", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string ParentId { get; set; }
+
+ [ApiMember(Name = "Ids", Description = "Item Ids to add to the collection", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST", AllowMultiple = true)]
+ public string Ids { get; set; }
+ }
+
+ [Route("/Collections/{Id}/Items", "POST", Summary = "Adds items to a collection")]
+ public class AddToCollection : IReturnVoid
+ {
+ [ApiMember(Name = "Ids", Description = "Item id, comma delimited", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string Ids { get; set; }
+
+ [ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
+ public string Id { get; set; }
+ }
+
+ [Route("/Collections/{Id}/Items", "DELETE", Summary = "Removes items from a collection")]
+ public class RemoveFromCollection : IReturnVoid
+ {
+ [ApiMember(Name = "Ids", Description = "Item id, comma delimited", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "DELETE")]
+ public string Ids { get; set; }
+
+ [ApiMember(Name = "Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
+ public string Id { get; set; }
+ }
+
+ [Authenticated]
+ public class CollectionService : BaseApiService
+ {
+ private readonly ICollectionManager _collectionManager;
+ private readonly IDtoService _dtoService;
+ private readonly IAuthorizationContext _authContext;
+
+ public CollectionService(
+ ILogger<CollectionService> logger,
+ IServerConfigurationManager serverConfigurationManager,
+ IHttpResultFactory httpResultFactory,
+ ICollectionManager collectionManager,
+ IDtoService dtoService,
+ IAuthorizationContext authContext)
+ : base(logger, serverConfigurationManager, httpResultFactory)
+ {
+ _collectionManager = collectionManager;
+ _dtoService = dtoService;
+ _authContext = authContext;
+ }
+
+ public object Post(CreateCollection request)
+ {
+ var userId = _authContext.GetAuthorizationInfo(Request).UserId;
+
+ var parentId = string.IsNullOrWhiteSpace(request.ParentId) ? (Guid?)null : new Guid(request.ParentId);
+
+ var item = _collectionManager.CreateCollection(new CollectionCreationOptions
+ {
+ IsLocked = request.IsLocked,
+ Name = request.Name,
+ ParentId = parentId,
+ ItemIdList = SplitValue(request.Ids, ','),
+ UserIds = new[] { userId }
+ });
+
+ var dtoOptions = GetDtoOptions(_authContext, request);
+
+ var dto = _dtoService.GetBaseItemDto(item, dtoOptions);
+
+ return new CollectionCreationResult
+ {
+ Id = dto.Id
+ };
+ }
+
+ public void Post(AddToCollection request)
+ {
+ _collectionManager.AddToCollection(new Guid(request.Id), SplitValue(request.Ids, ','));
+ }
+
+ public void Delete(RemoveFromCollection request)
+ {
+ _collectionManager.RemoveFromCollection(new Guid(request.Id), SplitValue(request.Ids, ','));
+ }
+ }
+}