1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-31 09:43:46 +00:00

Fixed build

Added PluginSetting, settings service needs some more thought
This commit is contained in:
Robert Beekman 2019-04-16 17:00:20 +02:00
parent bfc320c0ac
commit 99d15ad6ac
6 changed files with 171 additions and 30 deletions

View File

@ -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<T>
{
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<T>(settingEntity.Value);
}
/// <summary>
/// The name of the setting, unique to this plugin
/// </summary>
public string Name { get; }
/// <summary>
/// The value of the setting
/// </summary>
public T Value { get; set; }
/// <summary>
/// Determines whether the setting has been changed
/// </summary>
public bool HasChanged => JsonConvert.SerializeObject(Value) != _settingEntity.Value;
/// <summary>
/// Resets the setting to the last saved value
/// </summary>
public void RejectChanges()
{
Value = JsonConvert.DeserializeObject<T>(_settingEntity.Value);
}
/// <summary>
/// Saves the setting
/// </summary>
public void Save()
{
_settingEntity.Value = JsonConvert.SerializeObject(Value);
_settingRepository.Save();
}
/// <summary>
/// Saves the setting asynchronously
/// </summary>
/// <returns></returns>
public async Task SaveAsync()
{
_settingEntity.Value = JsonConvert.SerializeObject(Value);
await _settingRepository.SaveAsync();
}
}
}

View File

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

View File

@ -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<List<SettingEntity>> _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<T>
{
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<T>(settingEntity.Value);
}
/// <summary>
/// The name of the setting, unique to this plugin
/// </summary>
public string Name { get; }
/// <summary>
/// The value of the setting
/// </summary>
public T Value { get; set; }
/// <summary>
/// Determines whether the setting has been changed
/// </summary>
public bool HasChanged => JsonConvert.SerializeObject(Value) != _settingEntity.Value;
/// <summary>
/// Resets the setting to the last saved value
/// </summary>
public void RejectChanges()
{
Value = JsonConvert.DeserializeObject<T>(_settingEntity.Value);
}
/// <summary>
/// Saves the setting
/// </summary>
public void Save()
{
_settingEntity.Value = JsonConvert.SerializeObject(Value);
_settingRepository.Save();
}
/// <summary>
/// Saves the setting asynchronously
/// </summary>
/// <returns></returns>
public async Task SaveAsync()
{
_settingEntity.Value = JsonConvert.SerializeObject(Value);
await _settingRepository.SaveAsync();
}
}
}

View File

@ -147,7 +147,7 @@ namespace Artemis.Core.Services
try try
{ {
var constructorArguments = new ConstructorArgument("pluginInfo", pluginInfo); 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) catch (Exception e)
{ {

View File

@ -4,6 +4,7 @@ using Artemis.Storage.Repositories;
namespace Artemis.Core.Services namespace Artemis.Core.Services
{ {
// TODO: Rethink this :')
public class SettingsService : ISettingsService public class SettingsService : ISettingsService
{ {
private SettingRepository _settingRepository; private SettingRepository _settingRepository;
@ -13,9 +14,9 @@ namespace Artemis.Core.Services
_settingRepository = new SettingRepository(); _settingRepository = new SettingRepository();
} }
public PluginSettings GetPluginSettings(PluginInfo pluginInfo) public PluginSettingsContainer GetPluginSettings(PluginInfo pluginInfo)
{ {
return new PluginSettings(pluginInfo, _settingRepository); return new PluginSettingsContainer(pluginInfo, _settingRepository);
} }
} }

View File

@ -21,7 +21,12 @@ namespace Artemis.Storage.Repositories
return _dbContext.Settings; return _dbContext.Settings;
} }
public async Task<List<SettingEntity>> GetByPluginGuid(Guid pluginGuid) public List<SettingEntity> GetByPluginGuid(Guid pluginGuid)
{
return _dbContext.Settings.Where(p => p.PluginGuid == pluginGuid).ToList();
}
public async Task<List<SettingEntity>> GetByPluginGuidAsync(Guid pluginGuid)
{ {
return await _dbContext.Settings.Where(p => p.PluginGuid == pluginGuid).ToListAsync(); 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); return await _dbContext.Settings.FirstOrDefaultAsync(p => p.Name == name);
} }
public void Save()
{
_dbContext.SaveChanges();
}
public async Task SaveAsync() public async Task SaveAsync()
{ {
await _dbContext.SaveChangesAsync(); await _dbContext.SaveChangesAsync();