From 4296b3ffe7a009327c7fd225a66f7d48f2c1bcd0 Mon Sep 17 00:00:00 2001 From: RobertBeekman Date: Tue, 20 Oct 2026 09:47:42 +0200 Subject: [PATCH] Core - Fall back to the default value passed to GetSetting when a stored setting can't be read --- src/Artemis.Core.Tests/Services/SettingsServiceTests.cs | 6 ++---- src/Artemis.Core/Plugins/Settings/PluginSetting.cs | 4 ++-- src/Artemis.Core/Plugins/Settings/PluginSettings.cs | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs b/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs index 61db1621a..5ac449802 100644 --- a/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs +++ b/src/Artemis.Core.Tests/Services/SettingsServiceTests.cs @@ -75,15 +75,13 @@ public class SettingsServiceTests : IDisposable } [Fact] - public void GetSetting_AStoredValueThatDoesNotFitTheType_UsesTheDefaultOfTheType() + public void GetSetting_AStoredValueThatDoesNotFitTheType_UsesTheDefaultValuePassedIn() { Settings.GetSetting("Tests.Value", "not a number"); - // Pinned as-is: when the stored value can't be read as the requested type the setting falls back to default(T) - // rather than to the default value passed in, so the caller's default of 7 is ignored here PluginSetting setting = CreateNewSettingsService().GetSetting("Tests.Value", 7); - setting.Value.ShouldBe(0); + setting.Value.ShouldBe(7); setting.HasChanged.ShouldBeTrue(); } diff --git a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs index 8f14d542f..7eb1abbc4 100644 --- a/src/Artemis.Core/Plugins/Settings/PluginSetting.cs +++ b/src/Artemis.Core/Plugins/Settings/PluginSetting.cs @@ -15,7 +15,7 @@ public class PluginSetting : CorePropertyChanged, IPluginSetting private readonly PluginSettingEntity _pluginSettingEntity; private T _value; - internal PluginSetting(IPluginRepository pluginRepository, PluginSettingEntity pluginSettingEntity) + internal PluginSetting(IPluginRepository pluginRepository, PluginSettingEntity pluginSettingEntity, T? defaultValue = default) { _pluginRepository = pluginRepository; _pluginSettingEntity = pluginSettingEntity; @@ -27,7 +27,7 @@ public class PluginSetting : CorePropertyChanged, IPluginSetting } catch (JsonException) { - _value = default!; + _value = defaultValue!; } } diff --git a/src/Artemis.Core/Plugins/Settings/PluginSettings.cs b/src/Artemis.Core/Plugins/Settings/PluginSettings.cs index 811dcf817..34f126910 100644 --- a/src/Artemis.Core/Plugins/Settings/PluginSettings.cs +++ b/src/Artemis.Core/Plugins/Settings/PluginSettings.cs @@ -32,7 +32,7 @@ public class PluginSettings /// /// The type of the setting, can be any serializable type /// The name of the setting, may not be longer than 128 characters - /// The default value to use if the setting does not exist yet + /// The default value to use if the setting does not exist yet, or can't be read as public PluginSetting GetSetting(string name, T? defaultValue = default) { if (name.Length > 128) @@ -57,7 +57,7 @@ public class PluginSettings _pluginRepository.SaveSetting(settingEntity); } - PluginSetting pluginSetting = new(_pluginRepository, settingEntity); + PluginSetting pluginSetting = new(_pluginRepository, settingEntity, defaultValue); // This overrides null with the default value, I'm not sure if that's desirable because you // might expect something to go null and you might not