From 2ea4945aba5ec11d5dad56eadb25cddb9d950ac5 Mon Sep 17 00:00:00 2001 From: erikn Date: Tue, 29 Apr 2025 23:49:28 +0200 Subject: [PATCH] Fixed saving of settings file --- MosswartMassacre/PluginCore.cs | 4 +++- MosswartMassacre/PluginSettings.cs | 31 +++++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/MosswartMassacre/PluginCore.cs b/MosswartMassacre/PluginCore.cs index 4bc0c14..95e1858 100644 --- a/MosswartMassacre/PluginCore.cs +++ b/MosswartMassacre/PluginCore.cs @@ -105,11 +105,13 @@ namespace MosswartMassacre RemoteCommandsEnabled = PluginSettings.Instance.RemoteCommandsEnabled; HttpServerEnabled = PluginSettings.Instance.HttpServerEnabled; TelemetryEnabled = PluginSettings.Instance.TelemetryEnabled; + CharTag = PluginSettings.Instance.CharTag; MainView.SetRareMetaToggleState(RareMetaEnabled); if (TelemetryEnabled) Telemetry.Start(); - WriteToChat("Settings loaded."); + + } private void OnChatText(object sender, ChatTextInterceptEventArgs e) diff --git a/MosswartMassacre/PluginSettings.cs b/MosswartMassacre/PluginSettings.cs index da0de30..e59f09e 100644 --- a/MosswartMassacre/PluginSettings.cs +++ b/MosswartMassacre/PluginSettings.cs @@ -26,8 +26,7 @@ namespace MosswartMassacre { // determine settings file path string characterName = CoreManager.Current.CharacterFilter.Name; - string pluginFolder = Path.GetDirectoryName( - typeof(PluginSettings).Assembly.Location); + string pluginFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); _filePath = Path.Combine(pluginFolder, $"{characterName}.yaml"); // build serializer/deserializer once @@ -60,14 +59,8 @@ namespace MosswartMassacre else { _instance = loaded; + Save(); } - - // apply into runtime - PluginCore.RareMetaEnabled = _instance.RareMetaEnabled; - PluginCore.RemoteCommandsEnabled = _instance.RemoteCommandsEnabled; - PluginCore.HttpServerEnabled = _instance.HttpServerEnabled; - PluginCore.TelemetryEnabled = _instance.TelemetryEnabled; - PluginCore.CharTag = _instance.CharTag; } public static void Save() @@ -76,20 +69,32 @@ namespace MosswartMassacre { try { + // serialize to YAML var serializer = new SerializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) .Build(); var yaml = serializer.Serialize(_instance); - // atomic write: write to .tmp then replace + // write temp file var temp = _filePath + ".tmp"; File.WriteAllText(temp, yaml); - File.Replace(temp, _filePath, null); + + // if the settings file already exists, do an atomic Replace + if (File.Exists(_filePath)) + { + File.Replace(temp, _filePath, null); + } + else + { + // first‐time save: just move the temp into place + File.Move(temp, _filePath); + } } catch (Exception ex) { - PluginCore.DispatchChatToBoxWithPluginIntercept( - $"[MosswartMassacre] Error saving settings: {ex.Message}"); + // log to chat so you can see what went wrong + CoreManager.Current.Actions.AddChatText( + $"[MosswartMassacre] Error saving settings: {ex.Message}", 5); } } }