AdditionalModelFilter.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using Jellyfin.Extensions;
  3. using Jellyfin.Server.Migrations;
  4. using MediaBrowser.Common.Plugins;
  5. using MediaBrowser.Controller.Configuration;
  6. using MediaBrowser.Controller.LiveTv;
  7. using MediaBrowser.Model.ApiClient;
  8. using MediaBrowser.Model.Entities;
  9. using MediaBrowser.Model.Session;
  10. using MediaBrowser.Model.SyncPlay;
  11. using Microsoft.OpenApi.Models;
  12. using Swashbuckle.AspNetCore.SwaggerGen;
  13. namespace Jellyfin.Server.Filters
  14. {
  15. /// <summary>
  16. /// Add models not directly used by the API, but used for discovery and websockets.
  17. /// </summary>
  18. public class AdditionalModelFilter : IDocumentFilter
  19. {
  20. // Array of options that should not be visible in the api spec.
  21. private static readonly Type[] _ignoredConfigurations = { typeof(MigrationOptions) };
  22. private readonly IServerConfigurationManager _serverConfigurationManager;
  23. /// <summary>
  24. /// Initializes a new instance of the <see cref="AdditionalModelFilter"/> class.
  25. /// </summary>
  26. /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>
  27. public AdditionalModelFilter(IServerConfigurationManager serverConfigurationManager)
  28. {
  29. _serverConfigurationManager = serverConfigurationManager;
  30. }
  31. /// <inheritdoc />
  32. public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
  33. {
  34. context.SchemaGenerator.GenerateSchema(typeof(LibraryUpdateInfo), context.SchemaRepository);
  35. context.SchemaGenerator.GenerateSchema(typeof(IPlugin), context.SchemaRepository);
  36. context.SchemaGenerator.GenerateSchema(typeof(PlayRequest), context.SchemaRepository);
  37. context.SchemaGenerator.GenerateSchema(typeof(PlaystateRequest), context.SchemaRepository);
  38. context.SchemaGenerator.GenerateSchema(typeof(TimerEventInfo), context.SchemaRepository);
  39. context.SchemaGenerator.GenerateSchema(typeof(SendCommand), context.SchemaRepository);
  40. context.SchemaGenerator.GenerateSchema(typeof(GeneralCommandType), context.SchemaRepository);
  41. context.SchemaGenerator.GenerateSchema(typeof(GroupUpdate<object>), context.SchemaRepository);
  42. context.SchemaGenerator.GenerateSchema(typeof(SessionMessageType), context.SchemaRepository);
  43. context.SchemaGenerator.GenerateSchema(typeof(ServerDiscoveryInfo), context.SchemaRepository);
  44. foreach (var configuration in _serverConfigurationManager.GetConfigurationStores())
  45. {
  46. if (_ignoredConfigurations.IndexOf(configuration.ConfigurationType) != -1)
  47. {
  48. continue;
  49. }
  50. context.SchemaGenerator.GenerateSchema(configuration.ConfigurationType, context.SchemaRepository);
  51. }
  52. }
  53. }
  54. }