using System; using System.IO; using System.Linq; using System.Text.Json; using System.Text.Json.Serialization; using Netch.Models; namespace Netch.Utils { public static class Configuration { /// /// 数据目录 /// public const string DATA_DIR = "data"; /// /// 设置 /// public static readonly string SETTINGS_JSON = $"{DATA_DIR}\\settings.json"; private static readonly JsonSerializerOptions JsonSerializerOptions = Global.NewDefaultJsonSerializerOptions; static Configuration() { JsonSerializerOptions.Converters.Add(new ServerConverterWithTypeDiscriminator()); JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); } /// /// 加载配置 /// public static void Load() { if (File.Exists(SETTINGS_JSON)) { try { using var fileStream = File.OpenRead(SETTINGS_JSON); var settings = JsonSerializer.DeserializeAsync(fileStream, JsonSerializerOptions).Result!; CheckSetting(settings); Global.Settings = settings; } catch (Exception e) { Logging.Error(e.ToString()); Utils.Open(Logging.LogFile); Environment.Exit(-1); Global.Settings = null!; } } else { // 保存默认设置 Save(); } } private static void CheckSetting(Setting settings) { settings.Profiles.RemoveAll(p => p.ServerRemark == string.Empty || p.ModeRemark == string.Empty); if (settings.Profiles.Any(p => settings.Profiles.Any(p1 => p1 != p && p1.Index == p.Index))) for (var i = 0; i < settings.Profiles.Count; i++) settings.Profiles[i].Index = i; } /// /// 保存配置 /// public static void Save() { if (!Directory.Exists(DATA_DIR)) Directory.CreateDirectory(DATA_DIR); File.WriteAllBytes(SETTINGS_JSON, JsonSerializer.SerializeToUtf8Bytes(Global.Settings, JsonSerializerOptions)); } } }