Feat: Backup configuration file before update

This commit is contained in:
ChsBuffer
2021-03-22 01:59:49 +08:00
parent 54243a80e7
commit 15a1db3b21
3 changed files with 31 additions and 19 deletions

View File

@@ -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);

View File

@@ -12,12 +12,10 @@ namespace Netch.Utils
/// <summary>
/// 数据目录
/// </summary>
public const string DATA_DIR = "data";
public static string DataDirectoryFullName => Path.Combine(Global.NetchDir, "data");
public static string SettingFileFullName => $"{DataDirectoryFullName}\\settings.json";
/// <summary>
/// 设置
/// </summary>
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
/// </summary>
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<Setting>(fileStream, JsonSerializerOptions).Result!;
CheckSetting(settings);
@@ -71,10 +69,10 @@ namespace Netch.Utils
/// </summary>
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));
}
}
}

View File

@@ -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);
}
/// <summary>
@@ -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")))