From e9ce82445e50e64827c968b8d2a30d1634e30c5a Mon Sep 17 00:00:00 2001 From: David Mouse Date: Fri, 1 Apr 2022 01:55:28 -0400 Subject: [PATCH] Add ConfigurationType Types to generated OpenAPI This allows clients to see and work with the associated types for each NamedConfiguration key, even if the UpdateNamedConfiguration endpoint doesn't properly advertise its types. --- .../AppBase/BaseConfigurationManager.cs | 6 ++++++ .../Filters/AdditionalModelFilter.cs | 19 ++++++++++++++++++- .../Configuration/IConfigurationManager.cs | 6 ++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs index 19fe0b1085..2a4a8fb132 100644 --- a/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs +++ b/Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs @@ -398,6 +398,12 @@ namespace Emby.Server.Implementations.AppBase }); } + /// + public ConfigurationStore[] GetConfigurationStores() + { + return _configurationStores; + } + /// public Type GetConfigurationType(string key) { diff --git a/Jellyfin.Server/Filters/AdditionalModelFilter.cs b/Jellyfin.Server/Filters/AdditionalModelFilter.cs index 87a59e0b45..44e5b0d1e7 100644 --- a/Jellyfin.Server/Filters/AdditionalModelFilter.cs +++ b/Jellyfin.Server/Filters/AdditionalModelFilter.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Plugins; +using MediaBrowser.Common.Plugins; +using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.ApiClient; using MediaBrowser.Model.Entities; @@ -14,6 +15,17 @@ namespace Jellyfin.Server.Filters /// public class AdditionalModelFilter : IDocumentFilter { + private readonly IServerConfigurationManager _serverConfigurationManager; + + /// + /// Initializes a new instance of the class. + /// + /// Instance of the interface. + public AdditionalModelFilter(IServerConfigurationManager serverConfigurationManager) + { + _serverConfigurationManager = serverConfigurationManager; + } + /// public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { @@ -29,6 +41,11 @@ namespace Jellyfin.Server.Filters context.SchemaGenerator.GenerateSchema(typeof(SessionMessageType), context.SchemaRepository); context.SchemaGenerator.GenerateSchema(typeof(ServerDiscoveryInfo), context.SchemaRepository); + + foreach (var configuration in _serverConfigurationManager.GetConfigurationStores()) + { + context.SchemaGenerator.GenerateSchema(configuration.ConfigurationType, context.SchemaRepository); + } } } } diff --git a/MediaBrowser.Common/Configuration/IConfigurationManager.cs b/MediaBrowser.Common/Configuration/IConfigurationManager.cs index fc63d93503..e6696a571d 100644 --- a/MediaBrowser.Common/Configuration/IConfigurationManager.cs +++ b/MediaBrowser.Common/Configuration/IConfigurationManager.cs @@ -60,6 +60,12 @@ namespace MediaBrowser.Common.Configuration /// System.Object. object GetConfiguration(string key); + /// + /// Gets the array of coniguration stores. + /// + /// Array of ConfigurationStore. + ConfigurationStore[] GetConfigurationStores(); + /// /// Gets the type of the configuration. ///