using System.Text.Json; using RemoteAccessPlatform.Windows.Contracts; using RemoteAccessPlatform.Windows.Models; namespace RemoteAccessPlatform.Windows.Settings; public sealed class JsonLocalSettingsStore : ILocalSettingsStore { private static readonly JsonSerializerOptions SerializerOptions = new(JsonSerializerDefaults.Web) { WriteIndented = true }; public async Task LoadAsync(CancellationToken cancellationToken) { if (!File.Exists(StoragePathResolver.SettingsFilePath)) { return new LocalClientSettings(); } await using FileStream stream = File.OpenRead(StoragePathResolver.SettingsFilePath); LocalClientSettings? settings = await JsonSerializer.DeserializeAsync(stream, SerializerOptions, cancellationToken); return settings ?? new LocalClientSettings(); } public async Task SaveAsync(LocalClientSettings settings, CancellationToken cancellationToken) { StoragePathResolver.EnsureRoot(); await using FileStream stream = File.Create(StoragePathResolver.SettingsFilePath); await JsonSerializer.SerializeAsync(stream, settings, SerializerOptions, cancellationToken); } }