Преглед изворни кода

Merge pull request #7561 from DMouse10462/named-config-api-fix

Fix NamedConfiguration API Generation

(cherry picked from commit d7c548f3dbb74c03903cd9bb86ab3af33e295d15)
Signed-off-by: Joshua Boniface <joshua@boniface.me>
Cody Robibero пре 3 година
родитељ
комит
7424f0ca8c

+ 6 - 0
Emby.Server.Implementations/AppBase/BaseConfigurationManager.cs

@@ -398,6 +398,12 @@ namespace Emby.Server.Implementations.AppBase
             });
         }
 
+        /// <inheritdoc />
+        public ConfigurationStore[] GetConfigurationStores()
+        {
+            return _configurationStores;
+        }
+
         /// <inheritdoc />
         public Type GetConfigurationType(string key)
         {

+ 6 - 4
Jellyfin.Api/Controllers/ConfigurationController.cs

@@ -86,21 +86,23 @@ namespace Jellyfin.Api.Controllers
         /// Updates named configuration.
         /// </summary>
         /// <param name="key">Configuration key.</param>
+        /// <param name="configuration">Configuration.</param>
         /// <response code="204">Named configuration updated.</response>
         /// <returns>Update status.</returns>
         [HttpPost("Configuration/{key}")]
         [Authorize(Policy = Policies.RequiresElevation)]
         [ProducesResponseType(StatusCodes.Status204NoContent)]
-        public async Task<ActionResult> UpdateNamedConfiguration([FromRoute, Required] string key)
+        public ActionResult UpdateNamedConfiguration([FromRoute, Required] string key, [FromBody, Required] JsonDocument configuration)
         {
             var configurationType = _configurationManager.GetConfigurationType(key);
-            var configuration = await JsonSerializer.DeserializeAsync(Request.Body, configurationType, _serializerOptions).ConfigureAwait(false);
-            if (configuration == null)
+            var deserializedConfiguration = configuration.Deserialize(configurationType, _serializerOptions);
+
+            if (deserializedConfiguration == null)
             {
                 throw new ArgumentException("Body doesn't contain a valid configuration");
             }
 
-            _configurationManager.SaveConfiguration(key, configuration);
+            _configurationManager.SaveConfiguration(key, deserializedConfiguration);
             return NoContent();
         }
 

+ 18 - 1
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
     /// </summary>
     public class AdditionalModelFilter : IDocumentFilter
     {
+        private readonly IServerConfigurationManager _serverConfigurationManager;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="AdditionalModelFilter"/> class.
+        /// </summary>
+        /// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/> interface.</param>
+        public AdditionalModelFilter(IServerConfigurationManager serverConfigurationManager)
+        {
+            _serverConfigurationManager = serverConfigurationManager;
+        }
+
         /// <inheritdoc />
         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);
+            }
         }
     }
 }

+ 6 - 0
MediaBrowser.Common/Configuration/IConfigurationManager.cs

@@ -60,6 +60,12 @@ namespace MediaBrowser.Common.Configuration
         /// <returns>System.Object.</returns>
         object GetConfiguration(string key);
 
+        /// <summary>
+        /// Gets the array of coniguration stores.
+        /// </summary>
+        /// <returns>Array of ConfigurationStore.</returns>
+        ConfigurationStore[] GetConfigurationStores();
+
         /// <summary>
         /// Gets the type of the configuration.
         /// </summary>