aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/CollectionController.cs
diff options
context:
space:
mode:
authorDominik <git@secnd.me>2023-06-15 19:38:42 +0200
committerGitHub <noreply@github.com>2023-06-15 19:38:42 +0200
commit17f1e8d19b1fd693893d66d2275ed8ae2476344e (patch)
tree7f48be975faa92042769870957587b3c7864f631 /Jellyfin.Api/Controllers/CollectionController.cs
parente8ae7e5c38e28f13fa8de295e26c930cb46d9b79 (diff)
parent6771b5cabe96b4b3cbd1cd0c998d564f3dd17ed4 (diff)
Merge branch 'master' into segment-deletion
Diffstat (limited to 'Jellyfin.Api/Controllers/CollectionController.cs')
-rw-r--r--Jellyfin.Api/Controllers/CollectionController.cs167
1 files changed, 83 insertions, 84 deletions
diff --git a/Jellyfin.Api/Controllers/CollectionController.cs b/Jellyfin.Api/Controllers/CollectionController.cs
index effc9ed7a..2db04afb8 100644
--- a/Jellyfin.Api/Controllers/CollectionController.cs
+++ b/Jellyfin.Api/Controllers/CollectionController.cs
@@ -11,101 +11,100 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
-namespace Jellyfin.Api.Controllers
+namespace Jellyfin.Api.Controllers;
+
+/// <summary>
+/// The collection controller.
+/// </summary>
+[Route("Collections")]
+[Authorize(Policy = Policies.CollectionManagement)]
+public class CollectionController : BaseJellyfinApiController
{
+ private readonly ICollectionManager _collectionManager;
+ private readonly IDtoService _dtoService;
+
/// <summary>
- /// The collection controller.
+ /// Initializes a new instance of the <see cref="CollectionController"/> class.
/// </summary>
- [Route("Collections")]
- [Authorize(Policy = Policies.DefaultAuthorization)]
- public class CollectionController : BaseJellyfinApiController
+ /// <param name="collectionManager">Instance of <see cref="ICollectionManager"/> interface.</param>
+ /// <param name="dtoService">Instance of <see cref="IDtoService"/> interface.</param>
+ public CollectionController(
+ ICollectionManager collectionManager,
+ IDtoService dtoService)
{
- private readonly ICollectionManager _collectionManager;
- private readonly IDtoService _dtoService;
+ _collectionManager = collectionManager;
+ _dtoService = dtoService;
+ }
- /// <summary>
- /// Initializes a new instance of the <see cref="CollectionController"/> class.
- /// </summary>
- /// <param name="collectionManager">Instance of <see cref="ICollectionManager"/> interface.</param>
- /// <param name="dtoService">Instance of <see cref="IDtoService"/> interface.</param>
- public CollectionController(
- ICollectionManager collectionManager,
- IDtoService dtoService)
- {
- _collectionManager = collectionManager;
- _dtoService = dtoService;
- }
+ /// <summary>
+ /// Creates a new collection.
+ /// </summary>
+ /// <param name="name">The name of the collection.</param>
+ /// <param name="ids">Item Ids to add to the collection.</param>
+ /// <param name="parentId">Optional. Create the collection within a specific folder.</param>
+ /// <param name="isLocked">Whether or not to lock the new collection.</param>
+ /// <response code="200">Collection created.</response>
+ /// <returns>A <see cref="CollectionCreationOptions"/> with information about the new collection.</returns>
+ [HttpPost]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ public async Task<ActionResult<CollectionCreationResult>> CreateCollection(
+ [FromQuery] string? name,
+ [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] ids,
+ [FromQuery] Guid? parentId,
+ [FromQuery] bool isLocked = false)
+ {
+ var userId = User.GetUserId();
- /// <summary>
- /// Creates a new collection.
- /// </summary>
- /// <param name="name">The name of the collection.</param>
- /// <param name="ids">Item Ids to add to the collection.</param>
- /// <param name="parentId">Optional. Create the collection within a specific folder.</param>
- /// <param name="isLocked">Whether or not to lock the new collection.</param>
- /// <response code="200">Collection created.</response>
- /// <returns>A <see cref="CollectionCreationOptions"/> with information about the new collection.</returns>
- [HttpPost]
- [ProducesResponseType(StatusCodes.Status200OK)]
- public async Task<ActionResult<CollectionCreationResult>> CreateCollection(
- [FromQuery] string? name,
- [FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] ids,
- [FromQuery] Guid? parentId,
- [FromQuery] bool isLocked = false)
+ var item = await _collectionManager.CreateCollectionAsync(new CollectionCreationOptions
{
- var userId = User.GetUserId();
-
- var item = await _collectionManager.CreateCollectionAsync(new CollectionCreationOptions
- {
- IsLocked = isLocked,
- Name = name,
- ParentId = parentId,
- ItemIdList = ids,
- UserIds = new[] { userId }
- }).ConfigureAwait(false);
+ IsLocked = isLocked,
+ Name = name,
+ ParentId = parentId,
+ ItemIdList = ids,
+ UserIds = new[] { userId }
+ }).ConfigureAwait(false);
- var dtoOptions = new DtoOptions().AddClientFields(User);
+ var dtoOptions = new DtoOptions().AddClientFields(User);
- var dto = _dtoService.GetBaseItemDto(item, dtoOptions);
+ var dto = _dtoService.GetBaseItemDto(item, dtoOptions);
- return new CollectionCreationResult
- {
- Id = dto.Id
- };
- }
-
- /// <summary>
- /// Adds items to a collection.
- /// </summary>
- /// <param name="collectionId">The collection id.</param>
- /// <param name="ids">Item ids, comma delimited.</param>
- /// <response code="204">Items added to collection.</response>
- /// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
- [HttpPost("{collectionId}/Items")]
- [ProducesResponseType(StatusCodes.Status204NoContent)]
- public async Task<ActionResult> AddToCollection(
- [FromRoute, Required] Guid collectionId,
- [FromQuery, Required, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
+ return new CollectionCreationResult
{
- await _collectionManager.AddToCollectionAsync(collectionId, ids).ConfigureAwait(true);
- return NoContent();
- }
+ Id = dto.Id
+ };
+ }
- /// <summary>
- /// Removes items from a collection.
- /// </summary>
- /// <param name="collectionId">The collection id.</param>
- /// <param name="ids">Item ids, comma delimited.</param>
- /// <response code="204">Items removed from collection.</response>
- /// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
- [HttpDelete("{collectionId}/Items")]
- [ProducesResponseType(StatusCodes.Status204NoContent)]
- public async Task<ActionResult> RemoveFromCollection(
- [FromRoute, Required] Guid collectionId,
- [FromQuery, Required, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
- {
- await _collectionManager.RemoveFromCollectionAsync(collectionId, ids).ConfigureAwait(false);
- return NoContent();
- }
+ /// <summary>
+ /// Adds items to a collection.
+ /// </summary>
+ /// <param name="collectionId">The collection id.</param>
+ /// <param name="ids">Item ids, comma delimited.</param>
+ /// <response code="204">Items added to collection.</response>
+ /// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
+ [HttpPost("{collectionId}/Items")]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ public async Task<ActionResult> AddToCollection(
+ [FromRoute, Required] Guid collectionId,
+ [FromQuery, Required, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
+ {
+ await _collectionManager.AddToCollectionAsync(collectionId, ids).ConfigureAwait(true);
+ return NoContent();
+ }
+
+ /// <summary>
+ /// Removes items from a collection.
+ /// </summary>
+ /// <param name="collectionId">The collection id.</param>
+ /// <param name="ids">Item ids, comma delimited.</param>
+ /// <response code="204">Items removed from collection.</response>
+ /// <returns>A <see cref="NoContentResult"/> indicating success.</returns>
+ [HttpDelete("{collectionId}/Items")]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ public async Task<ActionResult> RemoveFromCollection(
+ [FromRoute, Required] Guid collectionId,
+ [FromQuery, Required, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] Guid[] ids)
+ {
+ await _collectionManager.RemoveFromCollectionAsync(collectionId, ids).ConfigureAwait(false);
+ return NoContent();
}
}