Added settings manager to handle configuration

This commit is contained in:
Thorsten Sommer 2024-04-05 22:23:36 +02:00
parent b02b39c023
commit 583f530d28
Signed by: tsommer
GPG Key ID: 371BBA77A02C0108
3 changed files with 36 additions and 4 deletions

View File

@ -1,11 +1,22 @@
namespace MindWork_AI_Studio.Components.Layout;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
public partial class MainLayout
namespace AIStudio.Components.Layout;
public partial class MainLayout : LayoutComponentBase
{
[Inject]
private IJSRuntime JsRuntime { get; set; } = null!;
#region Overrides of ComponentBase
protected override async Task OnInitializedAsync()
{
var dataDir = await this.JsRuntime.InvokeAsync<string>("window.__TAURI__.path.appLocalDataDir");
var configDir = await this.JsRuntime.InvokeAsync<string>("window.__TAURI__.path.appConfigDir");
SettingsManager.ConfigDirectory = configDir;
SettingsManager.DataDirectory = dataDir;
await base.OnInitializedAsync();
}

View File

@ -4,6 +4,9 @@ using MudBlazor;
using MudBlazor.Services;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMudServices();
builder.Services.AddMudMarkdownServices();
builder.Services.AddSingleton<SettingsManager>();
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddHubOptions(x =>
@ -15,8 +18,6 @@ builder.WebHost.UseKestrel();
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
builder.WebHost.UseUrls("http://localhost:5000");
builder.Services.AddMudServices();
builder.Services.AddMudMarkdownServices();
var app = builder.Build();
app.UseStaticFiles();

View File

@ -0,0 +1,20 @@
using Microsoft.JSInterop;
namespace AIStudio;
public sealed class SettingsManager
{
public static string? ConfigDirectory { get; set; }
public static string? DataDirectory { get; set; }
public bool IsSetUp => !string.IsNullOrWhiteSpace(ConfigDirectory) && !string.IsNullOrWhiteSpace(DataDirectory);
private readonly record struct GetSecretRequest(string Destination, string UserName);
public async Task<string> GetAPIKey(IJSRuntime jsRuntime) => await jsRuntime.InvokeAsync<string>("window.__TAURI__.invoke", "get_secret", new GetSecretRequest("api_key", Environment.UserName));
private readonly record struct StoreSecretRequest(string Destination, string UserName, string Secret);
public async Task SetAPIKey(IJSRuntime jsRuntime, string key) => await jsRuntime.InvokeVoidAsync("window.__TAURI__.invoke", "store_secret", new StoreSecretRequest("api_key", Environment.UserName, key));
}