Files
TorchRemote/TorchRemote.Plugin/Managers/SettingManager.cs
2022-09-30 11:51:34 +07:00

51 lines
1.6 KiB
C#

using System.Collections.Concurrent;
using System.Text.Json;
using Json.Schema;
using Json.Schema.Generation;
using NLog;
using Torch.API;
using Torch.Managers;
using Torch.Server.Managers;
using Torch.Server.ViewModels;
using TorchRemote.Plugin.Utils;
namespace TorchRemote.Plugin.Managers;
public class SettingManager : Manager
{
private static readonly ILogger Log = LogManager.GetCurrentClassLogger();
[Dependency]
private readonly InstanceManager _instanceManager = null!;
public SettingManager(ITorchBase torchInstance) : base(torchInstance)
{
}
public override void Attach()
{
base.Attach();
_instanceManager.InstanceLoaded += InstanceManagerOnInstanceLoaded;
}
private void InstanceManagerOnInstanceLoaded(ConfigDedicatedViewModel config)
{
RegisterSetting(config.SessionSettings, typeof(SessionSettingsViewModel));
}
public void RegisterSetting(object value, Type type, bool includeOnlyDisplay = true)
{
var builder = new JsonSchemaBuilder().FromType(type, new()
{
PropertyNamingMethod = input => Statics.SerializerOptions.PropertyNamingPolicy!.ConvertName(input)
});
Settings[type.FullName!] = new(type.Name, type, builder.Build(), value, includeOnlyDisplay);
Log.Info("Registered {0} type", type.FullName);
}
public IDictionary<string, Setting> Settings { get; } = new ConcurrentDictionary<string, Setting>();
}
public record Setting(string Name, Type Type, JsonSchema Schema, object Value, bool IncludeDisplayOnly);