Merge pull request #7137 from SenorSmartyPants/master

pull/7405/head
Bond-009 3 years ago committed by GitHub
commit 2579b2db56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1944,7 +1944,7 @@ namespace Jellyfin.Api.Controllers
return Task.CompletedTask; return Task.CompletedTask;
}); });
return FileStreamResponseHelpers.GetStaticFileResult(segmentPath, MimeTypes.GetMimeType(segmentPath), false, HttpContext); return FileStreamResponseHelpers.GetStaticFileResult(segmentPath, MimeTypes.GetMimeType(segmentPath));
} }
private int? GetCurrentTranscodingIndex(string playlist, string segmentExtension) private int? GetCurrentTranscodingIndex(string playlist, string segmentExtension)

@ -69,7 +69,7 @@ namespace Jellyfin.Api.Controllers
return BadRequest("Invalid segment."); return BadRequest("Invalid segment.");
} }
return FileStreamResponseHelpers.GetStaticFileResult(file, MimeTypes.GetMimeType(file), false, HttpContext); return FileStreamResponseHelpers.GetStaticFileResult(file, MimeTypes.GetMimeType(file));
} }
/// <summary> /// <summary>
@ -186,7 +186,7 @@ namespace Jellyfin.Api.Controllers
return Task.CompletedTask; return Task.CompletedTask;
}); });
return FileStreamResponseHelpers.GetStaticFileResult(path, MimeTypes.GetMimeType(path), false, HttpContext); return FileStreamResponseHelpers.GetStaticFileResult(path, MimeTypes.GetMimeType(path));
} }
} }
} }

@ -570,8 +570,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -654,8 +653,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -738,8 +736,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -822,8 +819,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -906,8 +902,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -990,8 +985,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1074,8 +1068,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1158,8 +1151,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1242,8 +1234,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1326,8 +1317,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1410,8 +1400,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1494,8 +1483,7 @@ namespace Jellyfin.Api.Controllers
blur, blur,
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
item, item)
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1596,7 +1584,6 @@ namespace Jellyfin.Api.Controllers
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
null, null,
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase),
info) info)
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1698,7 +1685,6 @@ namespace Jellyfin.Api.Controllers
backgroundColor, backgroundColor,
foregroundLayer, foregroundLayer,
null, null,
Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase),
info) info)
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@ -1907,7 +1893,6 @@ namespace Jellyfin.Api.Controllers
string? backgroundColor, string? backgroundColor,
string? foregroundLayer, string? foregroundLayer,
BaseItem? item, BaseItem? item,
bool isHeadRequest,
ItemImageInfo? imageInfo = null) ItemImageInfo? imageInfo = null)
{ {
if (percentPlayed.HasValue) if (percentPlayed.HasValue)
@ -1988,8 +1973,7 @@ namespace Jellyfin.Api.Controllers
return await GetImageResult( return await GetImageResult(
options, options,
cacheDuration, cacheDuration,
responseHeaders, responseHeaders).ConfigureAwait(false);
isHeadRequest).ConfigureAwait(false);
} }
private ImageFormat[] GetOutputFormats(ImageFormat? format) private ImageFormat[] GetOutputFormats(ImageFormat? format)
@ -2068,8 +2052,7 @@ namespace Jellyfin.Api.Controllers
private async Task<ActionResult> GetImageResult( private async Task<ActionResult> GetImageResult(
ImageProcessingOptions imageProcessingOptions, ImageProcessingOptions imageProcessingOptions,
TimeSpan? cacheDuration, TimeSpan? cacheDuration,
IDictionary<string, string> headers, IDictionary<string, string> headers)
bool isHeadRequest)
{ {
var (imagePath, imageContentType, dateImageModified) = await _imageProcessor.ProcessImage(imageProcessingOptions).ConfigureAwait(false); var (imagePath, imageContentType, dateImageModified) = await _imageProcessor.ProcessImage(imageProcessingOptions).ConfigureAwait(false);
@ -2120,12 +2103,6 @@ namespace Jellyfin.Api.Controllers
} }
} }
// if the request is a head request, return a NoContent result with the same headers as it would with a GET request
if (isHeadRequest)
{
return NoContent();
}
return PhysicalFile(imagePath, imageContentType ?? MediaTypeNames.Text.Plain); return PhysicalFile(imagePath, imageContentType ?? MediaTypeNames.Text.Plain);
} }
} }

@ -465,7 +465,7 @@ namespace Jellyfin.Api.Controllers
StreamingHelpers.AddDlnaHeaders(state, Response.Headers, true, state.Request.StartTimeTicks, Request, _dlnaManager); StreamingHelpers.AddDlnaHeaders(state, Response.Headers, true, state.Request.StartTimeTicks, Request, _dlnaManager);
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default); var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
return await FileStreamResponseHelpers.GetStaticRemoteStreamResult(state, isHeadRequest, httpClient, HttpContext).ConfigureAwait(false); return await FileStreamResponseHelpers.GetStaticRemoteStreamResult(state, httpClient, HttpContext).ConfigureAwait(false);
} }
if (@static.HasValue && @static.Value && state.InputProtocol != MediaProtocol.File) if (@static.HasValue && @static.Value && state.InputProtocol != MediaProtocol.File)
@ -494,9 +494,7 @@ namespace Jellyfin.Api.Controllers
return FileStreamResponseHelpers.GetStaticFileResult( return FileStreamResponseHelpers.GetStaticFileResult(
state.MediaPath, state.MediaPath,
contentType, contentType);
isHeadRequest,
HttpContext);
} }
// Need to start ffmpeg (because media can't be returned directly) // Need to start ffmpeg (because media can't be returned directly)

@ -138,7 +138,7 @@ namespace Jellyfin.Api.Helpers
StreamingHelpers.AddDlnaHeaders(state, _httpContextAccessor.HttpContext.Response.Headers, true, streamingRequest.StartTimeTicks, _httpContextAccessor.HttpContext.Request, _dlnaManager); StreamingHelpers.AddDlnaHeaders(state, _httpContextAccessor.HttpContext.Response.Headers, true, streamingRequest.StartTimeTicks, _httpContextAccessor.HttpContext.Request, _dlnaManager);
var httpClient = _httpClientFactory.CreateClient(NamedClient.Default); var httpClient = _httpClientFactory.CreateClient(NamedClient.Default);
return await FileStreamResponseHelpers.GetStaticRemoteStreamResult(state, isHeadRequest, httpClient, _httpContextAccessor.HttpContext).ConfigureAwait(false); return await FileStreamResponseHelpers.GetStaticRemoteStreamResult(state, httpClient, _httpContextAccessor.HttpContext).ConfigureAwait(false);
} }
if (streamingRequest.Static && state.InputProtocol != MediaProtocol.File) if (streamingRequest.Static && state.InputProtocol != MediaProtocol.File)
@ -167,9 +167,7 @@ namespace Jellyfin.Api.Helpers
return FileStreamResponseHelpers.GetStaticFileResult( return FileStreamResponseHelpers.GetStaticFileResult(
state.MediaPath, state.MediaPath,
contentType, contentType);
isHeadRequest,
_httpContextAccessor.HttpContext);
} }
// Need to start ffmpeg (because media can't be returned directly) // Need to start ffmpeg (because media can't be returned directly)

@ -22,14 +22,12 @@ namespace Jellyfin.Api.Helpers
/// Returns a static file from a remote source. /// Returns a static file from a remote source.
/// </summary> /// </summary>
/// <param name="state">The current <see cref="StreamState"/>.</param> /// <param name="state">The current <see cref="StreamState"/>.</param>
/// <param name="isHeadRequest">Whether the current request is a HTTP HEAD request so only the headers get returned.</param>
/// <param name="httpClient">The <see cref="HttpClient"/> making the remote request.</param> /// <param name="httpClient">The <see cref="HttpClient"/> making the remote request.</param>
/// <param name="httpContext">The current http context.</param> /// <param name="httpContext">The current http context.</param>
/// <param name="cancellationToken">A cancellation token that can be used to cancel the operation.</param> /// <param name="cancellationToken">A cancellation token that can be used to cancel the operation.</param>
/// <returns>A <see cref="Task{ActionResult}"/> containing the API response.</returns> /// <returns>A <see cref="Task{ActionResult}"/> containing the API response.</returns>
public static async Task<ActionResult> GetStaticRemoteStreamResult( public static async Task<ActionResult> GetStaticRemoteStreamResult(
StreamState state, StreamState state,
bool isHeadRequest,
HttpClient httpClient, HttpClient httpClient,
HttpContext httpContext, HttpContext httpContext,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -45,12 +43,6 @@ namespace Jellyfin.Api.Helpers
httpContext.Response.Headers[HeaderNames.AcceptRanges] = "none"; httpContext.Response.Headers[HeaderNames.AcceptRanges] = "none";
if (isHeadRequest)
{
httpContext.Response.Headers[HeaderNames.ContentType] = contentType;
return new OkResult();
}
return new FileStreamResult(await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false), contentType); return new FileStreamResult(await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false), contentType);
} }
@ -59,23 +51,11 @@ namespace Jellyfin.Api.Helpers
/// </summary> /// </summary>
/// <param name="path">The path to the file.</param> /// <param name="path">The path to the file.</param>
/// <param name="contentType">The content type of the file.</param> /// <param name="contentType">The content type of the file.</param>
/// <param name="isHeadRequest">Whether the current request is a HTTP HEAD request so only the headers get returned.</param>
/// <param name="httpContext">The current http context.</param>
/// <returns>An <see cref="ActionResult"/> the file.</returns> /// <returns>An <see cref="ActionResult"/> the file.</returns>
public static ActionResult GetStaticFileResult( public static ActionResult GetStaticFileResult(
string path, string path,
string contentType, string contentType)
bool isHeadRequest,
HttpContext httpContext)
{ {
httpContext.Response.ContentType = contentType;
// if the request is a head request, return an OkResult (200) with the same headers as it would with a GET request
if (isHeadRequest)
{
return new OkResult();
}
return new PhysicalFileResult(path, contentType) { EnableRangeProcessing = true }; return new PhysicalFileResult(path, contentType) { EnableRangeProcessing = true };
} }

Loading…
Cancel
Save