MediaSegmentsController.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Jellyfin.Api.Extensions;
  7. using Jellyfin.Database.Implementations.Enums;
  8. using MediaBrowser.Controller.Entities;
  9. using MediaBrowser.Controller.Library;
  10. using MediaBrowser.Controller.MediaSegments;
  11. using MediaBrowser.Model.MediaSegments;
  12. using MediaBrowser.Model.Querying;
  13. using Microsoft.AspNetCore.Authorization;
  14. using Microsoft.AspNetCore.Http;
  15. using Microsoft.AspNetCore.Mvc;
  16. namespace Jellyfin.Api.Controllers;
  17. /// <summary>
  18. /// Media Segments api.
  19. /// </summary>
  20. [Authorize]
  21. public class MediaSegmentsController : BaseJellyfinApiController
  22. {
  23. private readonly IMediaSegmentManager _mediaSegmentManager;
  24. private readonly ILibraryManager _libraryManager;
  25. /// <summary>
  26. /// Initializes a new instance of the <see cref="MediaSegmentsController"/> class.
  27. /// </summary>
  28. /// <param name="mediaSegmentManager">MediaSegments Manager.</param>
  29. /// <param name="libraryManager">The Library manager.</param>
  30. public MediaSegmentsController(IMediaSegmentManager mediaSegmentManager, ILibraryManager libraryManager)
  31. {
  32. _mediaSegmentManager = mediaSegmentManager;
  33. _libraryManager = libraryManager;
  34. }
  35. /// <summary>
  36. /// Gets all media segments based on an itemId.
  37. /// </summary>
  38. /// <param name="itemId">The ItemId.</param>
  39. /// <param name="includeSegmentTypes">Optional filter of requested segment types.</param>
  40. /// <returns>A list of media segment objects related to the requested itemId.</returns>
  41. [HttpGet("{itemId}")]
  42. [ProducesResponseType(StatusCodes.Status200OK)]
  43. [ProducesResponseType(StatusCodes.Status404NotFound)]
  44. public async Task<ActionResult<QueryResult<MediaSegmentDto>>> GetItemSegments(
  45. [FromRoute, Required] Guid itemId,
  46. [FromQuery] IEnumerable<MediaSegmentType>? includeSegmentTypes = null)
  47. {
  48. var item = _libraryManager.GetItemById<BaseItem>(itemId, User.GetUserId());
  49. if (item is null)
  50. {
  51. return NotFound();
  52. }
  53. var libraryOptions = _libraryManager.GetLibraryOptions(item);
  54. var items = await _mediaSegmentManager.GetSegmentsAsync(item, includeSegmentTypes, libraryOptions).ConfigureAwait(false);
  55. return Ok(new QueryResult<MediaSegmentDto>(items.ToArray()));
  56. }
  57. }