diff --git a/app/MindWork AI Studio/Program.cs b/app/MindWork AI Studio/Program.cs index 8953701..12ed425 100644 --- a/app/MindWork AI Studio/Program.cs +++ b/app/MindWork AI Studio/Program.cs @@ -1,5 +1,5 @@ -using AIStudio; using AIStudio.Components; +using AIStudio.Settings; using MudBlazor; using MudBlazor.Services; diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs new file mode 100644 index 0000000..ed2f9e2 --- /dev/null +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -0,0 +1,47 @@ +using System.Text.Json; +using AIStudio.Provider; +using Microsoft.JSInterop; + +namespace AIStudio.Settings; + +public sealed class SettingsManager +{ + private const string SETTINGS_FILENAME = "settings.json"; + + 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 GetAPIKey(IJSRuntime jsRuntime, IProvider provider) => await jsRuntime.InvokeAsync("window.__TAURI__.invoke", "get_secret", new GetSecretRequest($"provider::{provider.Id}::{provider.InstanceName}::api_key", Environment.UserName)); + + private readonly record struct StoreSecretRequest(string Destination, string UserName, string Secret); + + public async Task SetAPIKey(IJSRuntime jsRuntime, IProvider provider, string key) => await jsRuntime.InvokeVoidAsync("window.__TAURI__.invoke", "store_secret", new StoreSecretRequest($"provider::{provider.Id}::{provider.InstanceName}::api_key", Environment.UserName, key)); + + public async Task LoadSettings() + { + if(!this.IsSetUp) + return new Data(); + + var settingsPath = Path.Combine(ConfigDirectory!, SETTINGS_FILENAME); + if(!File.Exists(settingsPath)) + return new Data(); + + var settingsJson = await File.ReadAllTextAsync(settingsPath); + return JsonSerializer.Deserialize(settingsJson) ?? new Data(); + } + + public async Task StoreSettings(Data data) + { + if(!this.IsSetUp) + return; + + var settingsPath = Path.Combine(ConfigDirectory!, SETTINGS_FILENAME); + var settingsJson = JsonSerializer.Serialize(data); + await File.WriteAllTextAsync(settingsPath, settingsJson); + } +} \ No newline at end of file diff --git a/app/MindWork AI Studio/SettingsManager.cs b/app/MindWork AI Studio/SettingsManager.cs deleted file mode 100644 index aeddaba..0000000 --- a/app/MindWork AI Studio/SettingsManager.cs +++ /dev/null @@ -1,20 +0,0 @@ -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 GetAPIKey(IJSRuntime jsRuntime) => await jsRuntime.InvokeAsync("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)); -} \ No newline at end of file