diff --git a/Netch/Updater/Updater.cs b/Netch/Updater/Updater.cs index 7261b1b2..63628d29 100644 --- a/Netch/Updater/Updater.cs +++ b/Netch/Updater/Updater.cs @@ -95,6 +95,17 @@ namespace Netch.Updater private void ApplyUpdate() { + // Pre Update + try + { + // Backup Configuration file + File.Copy(Configuration.SettingFileFullName, Configuration.SettingFileFullName + ".bak", true); + } + catch (Exception) + { + // ignored + } + // extract Update file to {tempDirectory}\extract var extractPath = Path.Combine(_tempDirectory, "extract"); int exitCode; @@ -126,7 +137,7 @@ namespace Netch.Updater if (extendedKeepDirectories.Any(p => file.StartsWith(p))) continue; - if (Path.GetFileName(file) is ModeHelper.DISABLE_MODE_DIRECTORY_FILENAME) + if (Path.GetFileName(file) is ModeHelper.DisableModeDirectoryFileName) continue; filesToDelete.Add(file); diff --git a/Netch/Utils/Configuration.cs b/Netch/Utils/Configuration.cs index 85b5e5c2..99e74d50 100644 --- a/Netch/Utils/Configuration.cs +++ b/Netch/Utils/Configuration.cs @@ -12,12 +12,10 @@ namespace Netch.Utils /// /// 数据目录 /// - public const string DATA_DIR = "data"; + public static string DataDirectoryFullName => Path.Combine(Global.NetchDir, "data"); + + public static string SettingFileFullName => $"{DataDirectoryFullName}\\settings.json"; - /// - /// 设置 - /// - public static readonly string SETTINGS_JSON = $"{DATA_DIR}\\settings.json"; private static readonly JsonSerializerOptions JsonSerializerOptions = Global.NewDefaultJsonSerializerOptions; static Configuration() @@ -31,11 +29,11 @@ namespace Netch.Utils /// public static void Load() { - if (File.Exists(SETTINGS_JSON)) + if (File.Exists(SettingFileFullName)) { try { - using var fileStream = File.OpenRead(SETTINGS_JSON); + using var fileStream = File.OpenRead(SettingFileFullName); var settings = JsonSerializer.DeserializeAsync(fileStream, JsonSerializerOptions).Result!; CheckSetting(settings); @@ -71,10 +69,10 @@ namespace Netch.Utils /// public static void Save() { - if (!Directory.Exists(DATA_DIR)) - Directory.CreateDirectory(DATA_DIR); + if (!Directory.Exists(DataDirectoryFullName)) + Directory.CreateDirectory(DataDirectoryFullName); - File.WriteAllBytes(SETTINGS_JSON, JsonSerializer.SerializeToUtf8Bytes(Global.Settings, JsonSerializerOptions)); + File.WriteAllBytes(SettingFileFullName, JsonSerializer.SerializeToUtf8Bytes(Global.Settings, JsonSerializerOptions)); } } } \ No newline at end of file diff --git a/Netch/Utils/ModeHelper.cs b/Netch/Utils/ModeHelper.cs index 831e35d6..b710c055 100644 --- a/Netch/Utils/ModeHelper.cs +++ b/Netch/Utils/ModeHelper.cs @@ -10,16 +10,15 @@ namespace Netch.Utils { public static class ModeHelper { - private const string MODE_DIR = "mode"; - public const string DISABLE_MODE_DIRECTORY_FILENAME = "disabled"; + public const string DisableModeDirectoryFileName = "disabled"; - public static readonly string ModeDirectory = Path.Combine(Global.NetchDir, $"{MODE_DIR}\\"); + public static string ModeDirectoryFullName => Path.Combine(Global.NetchDir, "mode"); private static readonly FileSystemWatcher FileSystemWatcher; static ModeHelper() { - FileSystemWatcher = new FileSystemWatcher(ModeDirectory) + FileSystemWatcher = new FileSystemWatcher(ModeDirectoryFullName) { NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.FileName, IncludeSubdirectories = true, @@ -40,12 +39,16 @@ namespace Netch.Utils public static string GetRelativePath(string fullName) { - return fullName.Substring(ModeDirectory.Length); + var length = ModeDirectoryFullName.Length; + if (!ModeDirectoryFullName.EndsWith("\\")) + length++; + + return fullName.Substring(length); } public static string GetFullPath(string relativeName) { - return Path.Combine(ModeDirectory, relativeName); + return Path.Combine(ModeDirectoryFullName, relativeName); } /// @@ -54,7 +57,7 @@ namespace Netch.Utils public static void Load() { Global.Modes.Clear(); - LoadModeDirectory(ModeDirectory); + LoadModeDirectory(ModeDirectoryFullName); Sort(); } @@ -67,7 +70,7 @@ namespace Netch.Utils LoadModeDirectory(directory); // skip Directory with a disabled file in - if (File.Exists(Path.Combine(modeDirectory, DISABLE_MODE_DIRECTORY_FILENAME))) + if (File.Exists(Path.Combine(modeDirectory, DisableModeDirectoryFileName))) return; foreach (var file in Directory.GetFiles(modeDirectory).Where(f => f.EndsWith(".txt")))