| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | 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 = "string",                Format = "binary"            }        };        /// <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 response = operation.Responses                        .FirstOrDefault(o => o.Key.Equals(SuccessCode, StringComparison.Ordinal));                    // Operation doesn't have a response.                    if (response.Value is null)                    {                        continue;                    }                    // Clear existing responses.                    response.Value.Content.Clear();                    // Add all content-types as file.                    foreach (var contentType in producesFileAttribute.ContentTypes)                    {                        response.Value.Content.Add(contentType, _openApiMediaType);                    }                    break;                }            }        }    }}
 |