mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-07-09 15:20:34 +02:00
Merge pull request #4173 from BaronGreenback/SessionControllerFix
Unstable: Various controller fixes.
This commit is contained in:
commit
7dc22bec7b
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
@ -113,7 +113,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Gets a video hls playlist stream.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The item id.</param>
|
||||
/// <param name="container">The video container. Possible values are: ts, webm, asf, wmv, ogv, mp4, m4v, mkv, mpeg, mpg, avi, 3gp, wmv, wtv, m2ts, mov, iso, flv. </param>
|
||||
/// <param name="static">Optional. If true, the original file will be streamed statically without any encoding. Use either no url extension or the original file extension. true/false.</param>
|
||||
/// <param name="params">The streaming parameters.</param>
|
||||
/// <param name="tag">The tag.</param>
|
||||
|
@ -170,7 +169,6 @@ namespace Jellyfin.Api.Controllers
|
|||
[ProducesPlaylistFile]
|
||||
public async Task<ActionResult> GetMasterHlsVideoPlaylist(
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromRoute, Required] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -223,7 +221,6 @@ namespace Jellyfin.Api.Controllers
|
|||
var streamingRequest = new HlsVideoRequestDto
|
||||
{
|
||||
Id = itemId,
|
||||
Container = container,
|
||||
Static = @static ?? true,
|
||||
Params = @params,
|
||||
Tag = tag,
|
||||
|
@ -281,7 +278,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Gets an audio hls playlist stream.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The item id.</param>
|
||||
/// <param name="container">The video container. Possible values are: ts, webm, asf, wmv, ogv, mp4, m4v, mkv, mpeg, mpg, avi, 3gp, wmv, wtv, m2ts, mov, iso, flv. </param>
|
||||
/// <param name="static">Optional. If true, the original file will be streamed statically without any encoding. Use either no url extension or the original file extension. true/false.</param>
|
||||
/// <param name="params">The streaming parameters.</param>
|
||||
/// <param name="tag">The tag.</param>
|
||||
|
@ -338,7 +334,6 @@ namespace Jellyfin.Api.Controllers
|
|||
[ProducesPlaylistFile]
|
||||
public async Task<ActionResult> GetMasterHlsAudioPlaylist(
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromQuery, Required] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -391,7 +386,6 @@ namespace Jellyfin.Api.Controllers
|
|||
var streamingRequest = new HlsAudioRequestDto
|
||||
{
|
||||
Id = itemId,
|
||||
Container = container,
|
||||
Static = @static ?? true,
|
||||
Params = @params,
|
||||
Tag = tag,
|
||||
|
@ -449,7 +443,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Gets a video stream using HTTP live streaming.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The item id.</param>
|
||||
/// <param name="container">The video container. Possible values are: ts, webm, asf, wmv, ogv, mp4, m4v, mkv, mpeg, mpg, avi, 3gp, wmv, wtv, m2ts, mov, iso, flv. </param>
|
||||
/// <param name="static">Optional. If true, the original file will be streamed statically without any encoding. Use either no url extension or the original file extension. true/false.</param>
|
||||
/// <param name="params">The streaming parameters.</param>
|
||||
/// <param name="tag">The tag.</param>
|
||||
|
@ -504,7 +497,6 @@ namespace Jellyfin.Api.Controllers
|
|||
[ProducesPlaylistFile]
|
||||
public async Task<ActionResult> GetVariantHlsVideoPlaylist(
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromQuery, Required] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -557,7 +549,6 @@ namespace Jellyfin.Api.Controllers
|
|||
var streamingRequest = new VideoRequestDto
|
||||
{
|
||||
Id = itemId,
|
||||
Container = container,
|
||||
Static = @static ?? true,
|
||||
Params = @params,
|
||||
Tag = tag,
|
||||
|
@ -615,7 +606,6 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Gets an audio stream using HTTP live streaming.
|
||||
/// </summary>
|
||||
/// <param name="itemId">The item id.</param>
|
||||
/// <param name="container">The video container. Possible values are: ts, webm, asf, wmv, ogv, mp4, m4v, mkv, mpeg, mpg, avi, 3gp, wmv, wtv, m2ts, mov, iso, flv. </param>
|
||||
/// <param name="static">Optional. If true, the original file will be streamed statically without any encoding. Use either no url extension or the original file extension. true/false.</param>
|
||||
/// <param name="params">The streaming parameters.</param>
|
||||
/// <param name="tag">The tag.</param>
|
||||
|
@ -670,7 +660,6 @@ namespace Jellyfin.Api.Controllers
|
|||
[ProducesPlaylistFile]
|
||||
public async Task<ActionResult> GetVariantHlsAudioPlaylist(
|
||||
[FromRoute, Required] Guid itemId,
|
||||
[FromQuery, Required] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -723,7 +712,6 @@ namespace Jellyfin.Api.Controllers
|
|||
var streamingRequest = new StreamingRequestDto
|
||||
{
|
||||
Id = itemId,
|
||||
Container = container,
|
||||
Static = @static ?? true,
|
||||
Params = @params,
|
||||
Tag = tag,
|
||||
|
@ -841,7 +829,7 @@ namespace Jellyfin.Api.Controllers
|
|||
[FromRoute, Required] Guid itemId,
|
||||
[FromRoute, Required] string playlistId,
|
||||
[FromRoute, Required] int segmentId,
|
||||
[FromRoute, Required] string container,
|
||||
[FromRoute] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -1011,7 +999,7 @@ namespace Jellyfin.Api.Controllers
|
|||
[FromRoute, Required] Guid itemId,
|
||||
[FromRoute, Required] string playlistId,
|
||||
[FromRoute, Required] int segmentId,
|
||||
[FromRoute, Required] string container,
|
||||
[FromRoute] string container,
|
||||
[FromQuery] bool? @static,
|
||||
[FromQuery] string? @params,
|
||||
[FromQuery] string? tag,
|
||||
|
@ -1465,7 +1453,7 @@ namespace Jellyfin.Api.Controllers
|
|||
|
||||
var args = "-codec:v:0 " + codec;
|
||||
|
||||
// if (state.EnableMpegtsM2TsMode)
|
||||
// if (state.EnableMpegtsM2TsMode)
|
||||
// {
|
||||
// args += " -mpegts_m2ts_mode 1";
|
||||
// }
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
#pragma warning disable CA1801
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
@ -150,25 +148,25 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Instructs a session to play an item.
|
||||
/// </summary>
|
||||
/// <param name="sessionId">The session id.</param>
|
||||
/// <param name="command">The type of play command to issue (PlayNow, PlayNext, PlayLast). Clients who have not yet implemented play next and play last may play now.</param>
|
||||
/// <param name="playCommand">The type of play command to issue (PlayNow, PlayNext, PlayLast). Clients who have not yet implemented play next and play last may play now.</param>
|
||||
/// <param name="itemIds">The ids of the items to play, comma delimited.</param>
|
||||
/// <param name="startPositionTicks">The starting position of the first item.</param>
|
||||
/// <response code="204">Instruction sent to session.</response>
|
||||
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
||||
[HttpPost("Sessions/{sessionId}/Playing/{command}")]
|
||||
[HttpPost("Sessions/{sessionId}/Playing")]
|
||||
[Authorize(Policy = Policies.DefaultAuthorization)]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
public ActionResult Play(
|
||||
[FromRoute, Required] string sessionId,
|
||||
[FromRoute, Required] PlayCommand command,
|
||||
[FromQuery] Guid[] itemIds,
|
||||
[FromQuery, Required] PlayCommand playCommand,
|
||||
[FromQuery, Required] string itemIds,
|
||||
[FromQuery] long? startPositionTicks)
|
||||
{
|
||||
var playRequest = new PlayRequest
|
||||
{
|
||||
ItemIds = itemIds,
|
||||
ItemIds = RequestHelpers.GetGuids(itemIds),
|
||||
StartPositionTicks = startPositionTicks,
|
||||
PlayCommand = command
|
||||
PlayCommand = playCommand
|
||||
};
|
||||
|
||||
_sessionManager.SendPlayCommand(
|
||||
|
@ -184,20 +182,29 @@ namespace Jellyfin.Api.Controllers
|
|||
/// Issues a playstate command to a client.
|
||||
/// </summary>
|
||||
/// <param name="sessionId">The session id.</param>
|
||||
/// <param name="playstateRequest">The <see cref="PlaystateRequest"/>.</param>
|
||||
/// <param name="command">The <see cref="PlaystateCommand"/>.</param>
|
||||
/// <param name="seekPositionTicks">The optional position ticks.</param>
|
||||
/// <param name="controllingUserId">The optional controlling user id.</param>
|
||||
/// <response code="204">Playstate command sent to session.</response>
|
||||
/// <returns>A <see cref="NoContentResult"/>.</returns>
|
||||
[HttpPost("Sessions/{sessionId}/Playing")]
|
||||
[HttpPost("Sessions/{sessionId}/Playing/{command}")]
|
||||
[Authorize(Policy = Policies.DefaultAuthorization)]
|
||||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
public ActionResult SendPlaystateCommand(
|
||||
[FromRoute, Required] string sessionId,
|
||||
[FromBody] PlaystateRequest playstateRequest)
|
||||
[FromRoute, Required] PlaystateCommand command,
|
||||
[FromQuery] long? seekPositionTicks,
|
||||
[FromQuery] string? controllingUserId)
|
||||
{
|
||||
_sessionManager.SendPlaystateCommand(
|
||||
RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id,
|
||||
sessionId,
|
||||
playstateRequest,
|
||||
new PlaystateRequest()
|
||||
{
|
||||
Command = command,
|
||||
ControllingUserId = controllingUserId,
|
||||
SeekPositionTicks = seekPositionTicks,
|
||||
},
|
||||
CancellationToken.None);
|
||||
|
||||
return NoContent();
|
||||
|
@ -434,9 +441,9 @@ namespace Jellyfin.Api.Controllers
|
|||
[ProducesResponseType(StatusCodes.Status204NoContent)]
|
||||
public ActionResult ReportViewing(
|
||||
[FromQuery] string? sessionId,
|
||||
[FromQuery] string? itemId)
|
||||
[FromQuery, Required] string? itemId)
|
||||
{
|
||||
string session = RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
|
||||
string session = sessionId ?? RequestHelpers.GetSession(_sessionManager, _authContext, Request).Id;
|
||||
|
||||
_sessionManager.ReportNowViewingItem(session, itemId);
|
||||
return NoContent();
|
||||
|
|
|
@ -169,7 +169,7 @@ namespace Jellyfin.Api.Helpers
|
|||
|
||||
string? containerInternal = Path.GetExtension(state.RequestedUrl);
|
||||
|
||||
if (string.IsNullOrEmpty(streamingRequest.Container))
|
||||
if (!string.IsNullOrEmpty(streamingRequest.Container))
|
||||
{
|
||||
containerInternal = streamingRequest.Container;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue