diff options
| author | Bond-009 <bond.009@outlook.com> | 2020-09-09 20:20:35 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-09 20:20:35 +0000 |
| commit | 621f3b705052f628e27fb975a8bb809853742ad8 (patch) | |
| tree | d7c84c5598aafdc2d3fd502b940339423e84ff33 /Jellyfin.Server/Filters/FileResponseFilter.cs | |
| parent | b76d4ba454c43cc6293b733f2bba363e34a9bf5e (diff) | |
| parent | 25ac778a79c7ff39433db2acd92788e26228879f (diff) | |
Merge pull request #4037 from crobibero/api-stream-return
Set openapi schema type to file where possible
Diffstat (limited to 'Jellyfin.Server/Filters/FileResponseFilter.cs')
| -rw-r--r-- | Jellyfin.Server/Filters/FileResponseFilter.cs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Jellyfin.Server/Filters/FileResponseFilter.cs b/Jellyfin.Server/Filters/FileResponseFilter.cs new file mode 100644 index 000000000..8ea35c281 --- /dev/null +++ b/Jellyfin.Server/Filters/FileResponseFilter.cs @@ -0,0 +1,52 @@ +using System; +using System.Linq; +using Jellyfin.Api.Attributes; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace Jellyfin.Server.Filters +{ + /// <inheritdoc /> + public class FileResponseFilter : IOperationFilter + { + private const string SuccessCode = "200"; + private static readonly OpenApiMediaType _openApiMediaType = new OpenApiMediaType + { + Schema = new OpenApiSchema + { + Type = "file" + } + }; + + /// <inheritdoc /> + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + foreach (var attribute in context.ApiDescription.ActionDescriptor.EndpointMetadata) + { + if (attribute is ProducesFileAttribute producesFileAttribute) + { + // Get operation response values. + var (_, value) = operation.Responses + .FirstOrDefault(o => o.Key.Equals(SuccessCode, StringComparison.Ordinal)); + + // Operation doesn't have a response. + if (value == null) + { + continue; + } + + // Clear existing responses. + value.Content.Clear(); + + // Add all content-types as file. + foreach (var contentType in producesFileAttribute.GetContentTypes()) + { + value.Content.Add(contentType, _openApiMediaType); + } + + break; + } + } + } + } +} |
