diff --git a/src/Radarr.Api.V3/Config/ConfigController.cs b/src/Radarr.Api.V3/Config/ConfigController.cs index e9ab4cbfe..38aae64c9 100644 --- a/src/Radarr.Api.V3/Config/ConfigController.cs +++ b/src/Radarr.Api.V3/Config/ConfigController.cs @@ -10,7 +10,7 @@ namespace Radarr.Api.V3.Config public abstract class ConfigController : RestController where TResource : RestResource, new() { - private readonly IConfigService _configService; + protected readonly IConfigService _configService; protected ConfigController(IConfigService configService) { @@ -23,6 +23,7 @@ protected override TResource GetResourceById(int id) } [HttpGet] + [Produces("application/json")] public TResource GetConfig() { var resource = ToResource(_configService); @@ -32,7 +33,8 @@ public TResource GetConfig() } [RestPutById] - public ActionResult SaveConfig(TResource resource) + [Consumes("application/json")] + public virtual ActionResult SaveConfig(TResource resource) { var dictionary = resource.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public) diff --git a/src/Radarr.Api.V3/Config/UiConfigController.cs b/src/Radarr.Api.V3/Config/UiConfigController.cs index 9904c15ea..0b0da4d25 100644 --- a/src/Radarr.Api.V3/Config/UiConfigController.cs +++ b/src/Radarr.Api.V3/Config/UiConfigController.cs @@ -1,19 +1,40 @@ +using System.Linq; +using System.Reflection; +using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Configuration; +using Radarr.Api.V3.Config; using Radarr.Http; +using Radarr.Http.REST.Attributes; namespace Radarr.Api.V3.Config { [V3ApiController("config/ui")] public class UiConfigController : ConfigController { - public UiConfigController(IConfigService configService) + private readonly IConfigFileProvider _configFileProvider; + + public UiConfigController(IConfigFileProvider configFileProvider, IConfigService configService) : base(configService) { + _configFileProvider = configFileProvider; + } + + [RestPutById] + public override ActionResult SaveConfig(UiConfigResource resource) + { + var dictionary = resource.GetType() + .GetProperties(BindingFlags.Instance | BindingFlags.Public) + .ToDictionary(prop => prop.Name, prop => prop.GetValue(resource, null)); + + _configFileProvider.SaveConfigDictionary(dictionary); + _configService.SaveConfigDictionary(dictionary); + + return Accepted(resource.Id); } protected override UiConfigResource ToResource(IConfigService model) { - return UiConfigResourceMapper.ToResource(model); + return UiConfigResourceMapper.ToResource(_configFileProvider, model); } } } diff --git a/src/Radarr.Api.V3/Config/UiConfigResource.cs b/src/Radarr.Api.V3/Config/UiConfigResource.cs index 3c012337c..6ef78626c 100644 --- a/src/Radarr.Api.V3/Config/UiConfigResource.cs +++ b/src/Radarr.Api.V3/Config/UiConfigResource.cs @@ -21,11 +21,12 @@ public class UiConfigResource : RestResource public bool EnableColorImpairedMode { get; set; } public int MovieInfoLanguage { get; set; } public int UILanguage { get; set; } + public string Theme { get; set; } } public static class UiConfigResourceMapper { - public static UiConfigResource ToResource(IConfigService model) + public static UiConfigResource ToResource(IConfigFileProvider config, IConfigService model) { return new UiConfigResource { @@ -41,7 +42,8 @@ public static UiConfigResource ToResource(IConfigService model) EnableColorImpairedMode = model.EnableColorImpairedMode, MovieInfoLanguage = model.MovieInfoLanguage, - UILanguage = model.UILanguage + UILanguage = model.UILanguage, + Theme = config.Theme }; } }