From 99d15ad6acf1e4c5cd3aa9a6a409655c81280f5a Mon Sep 17 00:00:00 2001 From: Robert Beekman Date: Tue, 16 Apr 2019 17:00:20 +0200 Subject: [PATCH] Fixed build Added PluginSetting, settings service needs some more thought --- .../Plugins/Models/PluginSetting.cs | 66 ++++++++++++++ .../Plugins/Models/PluginSettings.cs | 26 ------ .../Plugins/Models/PluginSettingsContainer.cs | 90 +++++++++++++++++++ src/Artemis.Core/Services/PluginService.cs | 2 +- src/Artemis.Core/Services/SettingsService.cs | 5 +- .../Repositories/SettingRepository.cs | 12 ++- 6 files changed, 171 insertions(+), 30 deletions(-) create mode 100644 src/Artemis.Core/Plugins/Models/PluginSetting.cs delete mode 100644 src/Artemis.Core/Plugins/Models/PluginSettings.cs create mode 100644 src/Artemis.Core/Plugins/Models/PluginSettingsContainer.cs diff --git a/src/Artemis.Core/Plugins/Models/PluginSetting.cs b/src/Artemis.Core/Plugins/Models/PluginSetting.cs new file mode 100644 index 000000000..817eb5021 --- /dev/null +++ b/src/Artemis.Core/Plugins/Models/PluginSetting.cs @@ -0,0 +1,66 @@ +using System.Threading.Tasks; +using Artemis.Storage.Entities; +using Artemis.Storage.Repositories; +using Newtonsoft.Json; + +namespace Artemis.Core.Plugins.Models +{ + public class PluginSetting + { + private readonly PluginInfo _pluginInfo; + private readonly SettingEntity _settingEntity; + private readonly SettingRepository _settingRepository; + + internal PluginSetting(PluginInfo pluginInfo, SettingRepository settingRepository, SettingEntity settingEntity) + { + _pluginInfo = pluginInfo; + _settingRepository = settingRepository; + _settingEntity = settingEntity; + + Name = settingEntity.Name; + Value = JsonConvert.DeserializeObject(settingEntity.Value); + } + + /// + /// The name of the setting, unique to this plugin + /// + public string Name { get; } + + /// + /// The value of the setting + /// + public T Value { get; set; } + + /// + /// Determines whether the setting has been changed + /// + public bool HasChanged => JsonConvert.SerializeObject(Value) != _settingEntity.Value; + + /// + /// Resets the setting to the last saved value + /// + public void RejectChanges() + { + Value = JsonConvert.DeserializeObject(_settingEntity.Value); + } + + /// + /// Saves the setting + /// + public void Save() + { + _settingEntity.Value = JsonConvert.SerializeObject(Value); + _settingRepository.Save(); + } + + /// + /// Saves the setting asynchronously + /// + /// + public async Task SaveAsync() + { + _settingEntity.Value = JsonConvert.SerializeObject(Value); + await _settingRepository.SaveAsync(); + } + } +} \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Models/PluginSettings.cs b/src/Artemis.Core/Plugins/Models/PluginSettings.cs deleted file mode 100644 index 010521cf2..000000000 --- a/src/Artemis.Core/Plugins/Models/PluginSettings.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Artemis.Storage.Repositories; - -namespace Artemis.Core.Plugins.Models -{ - public class PluginSettings - { - private readonly PluginInfo _pluginInfo; - private readonly SettingRepository _settingRepository; - - internal PluginSettings(PluginInfo pluginInfo, SettingRepository settingRepository) - { - _pluginInfo = pluginInfo; - _settingRepository = settingRepository; - } - - public bool HasSettingChanged(string settingName) - { - return false; - } - - public bool HasAnySettingChanged() - { - return false; - } - } -} \ No newline at end of file diff --git a/src/Artemis.Core/Plugins/Models/PluginSettingsContainer.cs b/src/Artemis.Core/Plugins/Models/PluginSettingsContainer.cs new file mode 100644 index 000000000..bc458650c --- /dev/null +++ b/src/Artemis.Core/Plugins/Models/PluginSettingsContainer.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Artemis.Storage.Entities; +using Artemis.Storage.Repositories; +using Newtonsoft.Json; + +namespace Artemis.Core.Plugins.Models +{ + public class PluginSettingsContainer + { + private readonly PluginInfo _pluginInfo; + private readonly SettingRepository _settingRepository; + private Task> _settings; + + internal PluginSettingsContainer(PluginInfo pluginInfo, SettingRepository settingRepository) + { + _pluginInfo = pluginInfo; + _settingRepository = settingRepository; + } + + public bool HasSettingChanged(string settingName) + { + return false; + } + + public bool HasAnySettingChanged() + { + return false; + } + } + + public class PluginSetting + { + private readonly PluginInfo _pluginInfo; + private readonly SettingEntity _settingEntity; + private readonly SettingRepository _settingRepository; + + internal PluginSetting(PluginInfo pluginInfo, SettingRepository settingRepository, SettingEntity settingEntity) + { + _pluginInfo = pluginInfo; + _settingRepository = settingRepository; + _settingEntity = settingEntity; + + Name = settingEntity.Name; + Value = JsonConvert.DeserializeObject(settingEntity.Value); + } + + /// + /// The name of the setting, unique to this plugin + /// + public string Name { get; } + + /// + /// The value of the setting + /// + public T Value { get; set; } + + /// + /// Determines whether the setting has been changed + /// + public bool HasChanged => JsonConvert.SerializeObject(Value) != _settingEntity.Value; + + /// + /// Resets the setting to the last saved value + /// + public void RejectChanges() + { + Value = JsonConvert.DeserializeObject(_settingEntity.Value); + } + + /// + /// Saves the setting + /// + public void Save() + { + _settingEntity.Value = JsonConvert.SerializeObject(Value); + _settingRepository.Save(); + } + + /// + /// Saves the setting asynchronously + /// + /// + public async Task SaveAsync() + { + _settingEntity.Value = JsonConvert.SerializeObject(Value); + await _settingRepository.SaveAsync(); + } + } +} \ No newline at end of file diff --git a/src/Artemis.Core/Services/PluginService.cs b/src/Artemis.Core/Services/PluginService.cs index 1af180d45..d5e61d86a 100644 --- a/src/Artemis.Core/Services/PluginService.cs +++ b/src/Artemis.Core/Services/PluginService.cs @@ -147,7 +147,7 @@ namespace Artemis.Core.Services try { var constructorArguments = new ConstructorArgument("pluginInfo", pluginInfo); - pluginInfo.Instance = (Plugin) _childKernel.Get(pluginType, constraint: null, constructorArguments); + pluginInfo.Instance = (Plugin) _childKernel.Get(pluginType, constraint: null, parameters: constructorArguments); } catch (Exception e) { diff --git a/src/Artemis.Core/Services/SettingsService.cs b/src/Artemis.Core/Services/SettingsService.cs index 4029a21c4..da8a78591 100644 --- a/src/Artemis.Core/Services/SettingsService.cs +++ b/src/Artemis.Core/Services/SettingsService.cs @@ -4,6 +4,7 @@ using Artemis.Storage.Repositories; namespace Artemis.Core.Services { + // TODO: Rethink this :') public class SettingsService : ISettingsService { private SettingRepository _settingRepository; @@ -13,9 +14,9 @@ namespace Artemis.Core.Services _settingRepository = new SettingRepository(); } - public PluginSettings GetPluginSettings(PluginInfo pluginInfo) + public PluginSettingsContainer GetPluginSettings(PluginInfo pluginInfo) { - return new PluginSettings(pluginInfo, _settingRepository); + return new PluginSettingsContainer(pluginInfo, _settingRepository); } } diff --git a/src/Artemis.Storage/Repositories/SettingRepository.cs b/src/Artemis.Storage/Repositories/SettingRepository.cs index 2add6a9eb..aace641b8 100644 --- a/src/Artemis.Storage/Repositories/SettingRepository.cs +++ b/src/Artemis.Storage/Repositories/SettingRepository.cs @@ -21,7 +21,12 @@ namespace Artemis.Storage.Repositories return _dbContext.Settings; } - public async Task> GetByPluginGuid(Guid pluginGuid) + public List GetByPluginGuid(Guid pluginGuid) + { + return _dbContext.Settings.Where(p => p.PluginGuid == pluginGuid).ToList(); + } + + public async Task> GetByPluginGuidAsync(Guid pluginGuid) { return await _dbContext.Settings.Where(p => p.PluginGuid == pluginGuid).ToListAsync(); } @@ -36,6 +41,11 @@ namespace Artemis.Storage.Repositories return await _dbContext.Settings.FirstOrDefaultAsync(p => p.Name == name); } + public void Save() + { + _dbContext.SaveChanges(); + } + public async Task SaveAsync() { await _dbContext.SaveChangesAsync();