Files
Olive/Olive/Helpers/SettingsManager.cs
T
2026-07-30 20:19:01 +02:00

80 lines
1.7 KiB
C#

using Microsoft.CommandPalette.Extensions.Toolkit;
namespace Olive.Helpers;
internal sealed class SettingsManager : JsonSettingsManager
{
private const string Namespace = "Olive";
public SettingsManager()
{
FilePath = SettingsJsonPath();
Settings.Add(_klipyApiKey);
Settings.Add(_resultCount);
// Load settings from file upon initialization
LoadSettings();
Settings.SettingsChanged += (_, _) => SaveSettings();
}
public string SettingsPath => FilePath;
private readonly TextSetting _klipyApiKey = new(
Namespaced(nameof(KlipyApiKey)),
"Klipy API key",
"Private key used to call the Klipy API. It stays stored locally in Olive settings.",
string.Empty)
{
Placeholder = "Required",
IsRequired = true,
ErrorMessage = "Klipy API key is required."
};
private readonly IntegerSetting _resultCount = new(
Namespaced(nameof(ResultCount)),
"Result count",
"Number of GIF results to load for each search.",
50,
20,
100)
{
Placeholder = "Min 20, max 100",
IsRequired = true,
ErrorMessage = "Enter a number between 20 and 100."
};
public string KlipyApiKey
{
get
{
LoadSettings();
return _klipyApiKey.Value ?? string.Empty;
}
}
public bool HasKlipyApiKey => !string.IsNullOrWhiteSpace(KlipyApiKey);
public int ResultCount
{
get
{
LoadSettings();
return Math.Clamp(_resultCount.Value, 30, 100);
}
}
private static string SettingsJsonPath()
{
var directory = Utilities.BaseSettingsPath("Olive");
Directory.CreateDirectory(directory);
return Path.Combine(directory, "settings.json");
}
private static string Namespaced(string propertyName)
{
return $"{Namespace}.{propertyName}";
}
}