using DTLib.Extensions; using Млаумчерб.Клиент.видимое; namespace Млаумчерб.Клиент; public record Настройки { public string имя_пользователя { get; set; } = ""; public int выделенная_память_мб { get; set; } = 4096; public bool открывать_на_весь_экран { get; set; } public string путь_к_кубачу { get; set; } = "."; public bool скачать_жабу { get; set; } = true; public string? последняя_запущенная_версия { get; set; } [JsonIgnore] private Stream? fileWriteStream; public static Настройки ЗагрузитьИзФайла(string имя_файла = "млаумчерб.настройки") { Приложение.Логгер.LogInfo(nameof(Настройки), $"загружаются настройки из файла '{имя_файла}'"); if(!File.Exists(имя_файла)) { Приложение.Логгер.LogInfo(nameof(Настройки), "файл не существует"); return new Настройки(); } string текст = File.ReadAllText(имя_файла); Настройки? н = JsonConvert.DeserializeObject<Настройки>(текст); if (н == null) { File.Move(имя_файла, имя_файла + ".старые", true); Ошибки.ПоказатьСообщение("Настройки", $"Не удалось прочитать настройки.\n" + $"Сломанный файл настроек переименован в '{имя_файла}.старые'.\n" + $"Создаётся новый файл '{имя_файла}'."); н = new Настройки(); н.СохранитьВФайл(); } Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки загружены: {н}"); return н; } public void СохранитьВФайл(string имя_файла = "млаумчерб.настройки") { //TODO: file backup and restore Приложение.Логгер.LogDebug(nameof(Настройки), $"настройки сохраняются в файл '{имя_файла}'"); fileWriteStream ??= File.OpenWrite(имя_файла); var текст = JsonConvert.SerializeObject(this, Formatting.Indented); fileWriteStream.Seek(0, SeekOrigin.Begin); fileWriteStream.FluentWriteString(текст).Flush(); Приложение.Логгер.LogDebug(nameof(Настройки), $"настройки сохранены: {текст}"); } }