From 6c50f8be6f307a055d206b0508b9966d97e51c95 Mon Sep 17 00:00:00 2001
From: Brett Hewitson
Date: Thu, 9 Dec 2021 17:10:07 +1000
Subject: [PATCH] Changed the plugin initialization so it throws an exception
if unable to load config file, rather than creating a new config file.
---
src/Plugin.Discord/DiscordPlugin.cs | 66 +++++++++----------
.../Models/DiscordPluginConfig.cs | 7 +-
src/Plugin.Discord/VersionFeed.xml | 5 ++
src/Plugin.Discord/VersionFeedBeta.xml | 23 +++++++
.../Windows/ConfigProfileWindow.xaml.cs | 5 +-
.../Windows/ConfigWindow.xaml.cs | 44 ++++---------
6 files changed, 79 insertions(+), 71 deletions(-)
diff --git a/src/Plugin.Discord/DiscordPlugin.cs b/src/Plugin.Discord/DiscordPlugin.cs
index 0dc4fb18..26f59402 100644
--- a/src/Plugin.Discord/DiscordPlugin.cs
+++ b/src/Plugin.Discord/DiscordPlugin.cs
@@ -38,6 +38,8 @@ namespace ServerManagerTool.Plugin.Discord
public bool Enabled => true;
+ public string ConfigFile => Path.Combine(PluginHelper.PluginFolder, Config.Default.ConfigFile);
+
public string PluginCode => Config.Default.PluginCode;
public string PluginName => Config.Default.PluginName;
@@ -227,56 +229,50 @@ namespace ServerManagerTool.Plugin.Discord
}
}
- private void LoadConfig()
+ internal void BackupConfig()
{
- try
+ if (!File.Exists(ConfigFile))
+ return;
+
+ var backupFile = Path.ChangeExtension(ConfigFile, "bak");
+ File.Copy(ConfigFile, backupFile, true);
+ }
+
+ internal void LoadConfig()
+ {
+ PluginConfig = null;
+
+ if (File.Exists(ConfigFile))
{
- PluginConfig = null;
-
- var configFile = Path.Combine(PluginHelper.PluginFolder, Config.Default.ConfigFile);
- PluginConfig = JsonUtils.DeserializeFromFile(configFile);
-
- if ((PluginConfig?.ConfigProfiles?.Count ?? 0) == 0)
- {
- PluginConfig = new DiscordPluginConfig();
-
- SaveConfig();
- }
-
- PluginConfig?.CommitChanges();
+ PluginConfig = JsonUtils.DeserializeFromFile(ConfigFile);
}
- catch (Exception ex)
+ else
{
PluginConfig = new DiscordPluginConfig();
- Debug.WriteLine($"ERROR: {nameof(LoadConfig)}\r\n{ex.Message}");
+ SaveConfig();
}
+
+ if (PluginConfig is null)
+ {
+ throw new Exception("Profile config file could not be loaded.");
+ }
+
+ PluginConfig.CommitChanges();
}
public void OpenConfigForm(Window owner)
{
- var window = new ConfigWindow(this, this.PluginConfig);
+ var window = new ConfigWindow(this, PluginConfig);
window.Owner = owner;
+ window.ShowDialog();
- var dialogResult = window.ShowDialog();
- if (dialogResult.HasValue && dialogResult.Value)
- {
- SaveConfig();
- LoadConfig();
- }
+ LoadConfig();
}
- private void SaveConfig()
+ internal void SaveConfig()
{
- try
- {
- var configFile = Path.Combine(PluginHelper.PluginFolder, Config.Default.ConfigFile);
- JsonUtils.SerializeToFile(PluginConfig, configFile);
- PluginConfig?.CommitChanges();
- }
- catch (Exception ex)
- {
- Debug.WriteLine($"ERROR: {nameof(SaveConfig)}\r\n{ex.Message}");
- }
+ JsonUtils.SerializeToFile(PluginConfig, ConfigFile);
+ PluginConfig.CommitChanges();
}
}
}
diff --git a/src/Plugin.Discord/Models/DiscordPluginConfig.cs b/src/Plugin.Discord/Models/DiscordPluginConfig.cs
index b0705f91..fbea383b 100644
--- a/src/Plugin.Discord/Models/DiscordPluginConfig.cs
+++ b/src/Plugin.Discord/Models/DiscordPluginConfig.cs
@@ -24,12 +24,9 @@ namespace ServerManagerTool.Plugin.Discord
public ObservableList ConfigProfiles
{
get { return Get>(); }
- set { Set(value); }
+ private set { Set(value); }
}
- public override bool HasAnyChanges
- {
- get => base.HasChanges || (ConfigProfiles?.HasAnyChanges ?? false);
- }
+ public override bool HasAnyChanges => base.HasChanges || ConfigProfiles.HasAnyChanges;
}
}
diff --git a/src/Plugin.Discord/VersionFeed.xml b/src/Plugin.Discord/VersionFeed.xml
index dbe7f661..8677acf8 100644
--- a/src/Plugin.Discord/VersionFeed.xml
+++ b/src/Plugin.Discord/VersionFeed.xml
@@ -27,6 +27,11 @@
de-DE Translation file updated.
pt-BR Translation file updated.
+ CHANGE
+
+
+ - Changed the plugin initialization so it throws an exception if unable to load config file, rather than creating a new config file.
+
diff --git a/src/Plugin.Discord/VersionFeedBeta.xml b/src/Plugin.Discord/VersionFeedBeta.xml
index 805d459c..b8c9ccbf 100644
--- a/src/Plugin.Discord/VersionFeedBeta.xml
+++ b/src/Plugin.Discord/VersionFeedBeta.xml
@@ -7,6 +7,29 @@
2021-12-09T00:00:00Z
+
+ urn:uuid:FD4F56C3-9E44-4422-A761-87E7F957454F
+ 1.0.19 (1.0.19.2)
+ 1.0.19.2
+
+ 2021-12-09T00:00:00Z
+
+
+
+ CHANGE
+
+
+ - Changed the plugin initialization so it throws an exception if unable to load config file, rather than creating a new config file.
+
+
+
+
+
+ bletch
+ bletch1971@hotmail.com
+
+
+
urn:uuid:A9EC2F32-E026-485F-BD7B-C657DBA95B54
1.0.19 (1.0.19.1)
diff --git a/src/Plugin.Discord/Windows/ConfigProfileWindow.xaml.cs b/src/Plugin.Discord/Windows/ConfigProfileWindow.xaml.cs
index 0b8487b4..3f8fec2a 100644
--- a/src/Plugin.Discord/Windows/ConfigProfileWindow.xaml.cs
+++ b/src/Plugin.Discord/Windows/ConfigProfileWindow.xaml.cs
@@ -25,7 +25,7 @@ namespace ServerManagerTool.Plugin.Discord.Windows
InitializeComponent();
WindowUtils.UpdateResourceDictionary(this, plugin.LanguageCode);
- this.Plugin = plugin ?? new DiscordPlugin();
+ this.Plugin = plugin;
this.OriginalProfile = profile;
this.Profile = profile.Clone();
this.Profile.CommitChanges();
@@ -77,7 +77,10 @@ namespace ServerManagerTool.Plugin.Discord.Windows
if (this.Profile.HasAnyChanges)
{
if (MessageBox.Show(ResourceUtils.GetResourceString(this.Resources, "ConfigProfileWindow_CloseLabel"), ResourceUtils.GetResourceString(this.Resources, "ConfigProfileWindow_CloseTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+ {
e.Cancel = true;
+ return;
+ }
}
}
diff --git a/src/Plugin.Discord/Windows/ConfigWindow.xaml.cs b/src/Plugin.Discord/Windows/ConfigWindow.xaml.cs
index 532b89a2..7962b536 100644
--- a/src/Plugin.Discord/Windows/ConfigWindow.xaml.cs
+++ b/src/Plugin.Discord/Windows/ConfigWindow.xaml.cs
@@ -23,8 +23,8 @@ namespace ServerManagerTool.Plugin.Discord.Windows
InitializeComponent();
WindowUtils.UpdateResourceDictionary(this, plugin.LanguageCode);
- this.Plugin = plugin ?? new DiscordPlugin();
- this.PluginConfig = pluginConfig ?? new DiscordPluginConfig();
+ this.Plugin = plugin;
+ this.PluginConfig = pluginConfig;
if (plugin.BetaEnabled)
Title = $"{Title} {ResourceUtils.GetResourceString(this.Resources, "Global_BetaModeLabel")}";
@@ -64,7 +64,10 @@ namespace ServerManagerTool.Plugin.Discord.Windows
if (PluginConfig.HasAnyChanges)
{
if (MessageBox.Show(ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_CloseLabel"), ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_CloseTitle"), MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+ {
e.Cancel = true;
+ return;
+ }
}
}
@@ -91,8 +94,7 @@ namespace ServerManagerTool.Plugin.Discord.Windows
try
{
var profile = new ConfigProfile();
-
- if (EditProfile(profile))
+ if (OpenConfigProfile(profile))
PluginConfig.ConfigProfiles.Add(profile);
}
catch (Exception ex)
@@ -143,7 +145,7 @@ namespace ServerManagerTool.Plugin.Discord.Windows
try
{
var profile = ((ConfigProfile)((Button)e.Source).DataContext);
- EditProfile(profile);
+ OpenConfigProfile(profile);
}
catch (Exception ex)
{
@@ -173,32 +175,21 @@ namespace ServerManagerTool.Plugin.Discord.Windows
{
try
{
- BackupExistingConfig();
- SaveConfig();
+ Plugin.BackupConfig();
}
catch (Exception ex)
{
- Debug.WriteLine($"ERROR: {nameof(Save_Click)}\r\n{ex.Message}");
- MessageBox.Show(ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_SaveErrorLabel"), ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_SaveErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
+ Debug.WriteLine($"ERROR: {nameof(Save_Click)} - Backup\r\n{ex.Message}");
}
- }
-
- private void BackupExistingConfig()
- {
- var configFile = Path.Combine(PluginHelper.PluginFolder, Config.Default.ConfigFile);
- if (!File.Exists(configFile))
- return;
-
- var backupFile = Path.ChangeExtension(configFile, "bak");
try
{
- File.Copy(configFile, backupFile, true);
+ Plugin.SaveConfig();
}
- catch
+ catch (Exception ex)
{
- // do nothing, just exit if cannot backup existing config file
- throw;
+ Debug.WriteLine($"ERROR: {nameof(Save_Click)} - Save\r\n{ex.Message}");
+ MessageBox.Show(ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_SaveErrorLabel"), ResourceUtils.GetResourceString(this.Resources, "ConfigWindow_SaveErrorTitle"), MessageBoxButton.OK, MessageBoxImage.Error);
}
}
@@ -248,7 +239,7 @@ namespace ServerManagerTool.Plugin.Discord.Windows
}
}
- private bool EditProfile(ConfigProfile profile)
+ private bool OpenConfigProfile(ConfigProfile profile)
{
if (profile == null)
return false;
@@ -262,13 +253,6 @@ namespace ServerManagerTool.Plugin.Discord.Windows
return dialogResult.HasValue && dialogResult.Value;
}
- private void SaveConfig()
- {
- var configFile = Path.Combine(PluginHelper.PluginFolder, Config.Default.ConfigFile);
- JsonUtils.SerializeToFile(PluginConfig, configFile);
- PluginConfig?.CommitChanges();
- }
-
#region Drag and Drop
private static readonly DependencyProperty DraggedItemProperty = DependencyProperty.Register(nameof(DraggedItem), typeof(ConfigProfile), typeof(ConfigWindow), new PropertyMetadata(null));