1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-05-06 23:34:05 +02:00

Move some configuration classes to TweetLib.Core

This commit is contained in:
chylex 2019-05-11 08:18:53 +02:00
parent dc31a34225
commit fe2269c838
10 changed files with 79 additions and 64 deletions

View File

@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using TweetDuck.Configuration.Instance;
using TweetDuck.Data;
using TweetLib.Core.Features.Configuration;
using TweetLib.Core.Serialization.Converters;
using TweetLib.Core.Utils;
namespace TweetDuck.Configuration{
sealed class ConfigManager{
sealed class ConfigManager : IConfigManager{
public UserConfig User { get; }
public SystemConfig System { get; }
public PluginConfig Plugins { get; }
@ -70,59 +70,13 @@ public void ReloadAll(){
infoPlugins.Reload();
}
private void TriggerProgramRestartRequested(){
void IConfigManager.TriggerProgramRestartRequested(){
ProgramRestartRequested?.Invoke(this, EventArgs.Empty);
}
private IConfigInstance<BaseConfig> GetInstanceInfo(BaseConfig instance){
IConfigInstance<BaseConfig> IConfigManager.GetInstanceInfo(BaseConfig instance){
Type instanceType = instance.GetType();
return Array.Find(infoList, info => info.Instance.GetType() == instanceType); // TODO handle null
}
public abstract class BaseConfig{
private readonly ConfigManager configManager;
protected BaseConfig(ConfigManager configManager){
this.configManager = configManager;
}
// Management
public void Save(){
configManager.GetInstanceInfo(this).Save();
}
public void Reload(){
configManager.GetInstanceInfo(this).Reload();
}
public void Reset(){
configManager.GetInstanceInfo(this).Reset();
}
// Construction methods
public T ConstructWithDefaults<T>() where T : BaseConfig{
return ConstructWithDefaults(configManager) as T;
}
protected abstract BaseConfig ConstructWithDefaults(ConfigManager configManager);
// Utility methods
protected void UpdatePropertyWithEvent<T>(ref T field, T value, EventHandler eventHandler){
if (!EqualityComparer<T>.Default.Equals(field, value)){
field = value;
eventHandler?.Invoke(this, EventArgs.Empty);
}
}
protected void UpdatePropertyWithRestartRequest<T>(ref T field, T value){
if (!EqualityComparer<T>.Default.Equals(field, value)){
field = value;
configManager.TriggerProgramRestartRequested();
}
}
}
}
}

View File

@ -1,9 +1,10 @@
using System;
using System.IO;
using TweetLib.Core.Features.Configuration;
using TweetLib.Core.Serialization;
namespace TweetDuck.Configuration.Instance{
sealed class FileConfigInstance<T> : IConfigInstance<T> where T : ConfigManager.BaseConfig{
sealed class FileConfigInstance<T> : IConfigInstance<T> where T : BaseConfig{
private const string ErrorTitle = "Configuration Error";
public T Instance { get; }

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Text;
using TweetLib.Core.Features.Configuration;
namespace TweetDuck.Configuration.Instance{
class PluginConfigInstance : IConfigInstance<PluginConfig>{

View File

@ -1,10 +1,11 @@
using System;
using System.Collections.Generic;
using TweetLib.Core.Features.Configuration;
using TweetLib.Core.Features.Plugins;
using TweetLib.Core.Features.Plugins.Events;
namespace TweetDuck.Configuration{
sealed class PluginConfig : ConfigManager.BaseConfig, IPluginConfig{
sealed class PluginConfig : BaseConfig, IPluginConfig{
private static readonly string[] DefaultDisabled = {
"official/clear-columns",
"official/reply-account"
@ -36,9 +37,9 @@ public void ReloadSilently(IEnumerable<string> newDisabled){
// END OF CONFIG
public PluginConfig(ConfigManager configManager) : base(configManager){}
public PluginConfig(IConfigManager configManager) : base(configManager){}
protected override ConfigManager.BaseConfig ConstructWithDefaults(ConfigManager configManager){
protected override BaseConfig ConstructWithDefaults(IConfigManager configManager){
return new PluginConfig(configManager);
}
}

View File

@ -1,5 +1,7 @@
namespace TweetDuck.Configuration{
sealed class SystemConfig : ConfigManager.BaseConfig{
using TweetLib.Core.Features.Configuration;
namespace TweetDuck.Configuration{
sealed class SystemConfig : BaseConfig{
// CONFIGURATION DATA
@ -17,9 +19,9 @@ public bool HardwareAcceleration{
// END OF CONFIG
public SystemConfig(ConfigManager configManager) : base(configManager){}
public SystemConfig(IConfigManager configManager) : base(configManager){}
protected override ConfigManager.BaseConfig ConstructWithDefaults(ConfigManager configManager){
protected override BaseConfig ConstructWithDefaults(IConfigManager configManager){
return new SystemConfig(configManager);
}
}

View File

@ -5,9 +5,10 @@
using TweetDuck.Core.Other;
using TweetDuck.Core.Utils;
using TweetDuck.Data;
using TweetLib.Core.Features.Configuration;
namespace TweetDuck.Configuration{
sealed class UserConfig : ConfigManager.BaseConfig{
sealed class UserConfig : BaseConfig{
// CONFIGURATION DATA
@ -135,9 +136,9 @@ public string SpellCheckLanguage{
// END OF CONFIG
public UserConfig(ConfigManager configManager) : base(configManager){}
public UserConfig(IConfigManager configManager) : base(configManager){}
protected override ConfigManager.BaseConfig ConstructWithDefaults(ConfigManager configManager){
protected override BaseConfig ConstructWithDefaults(IConfigManager configManager){
return new UserConfig(configManager);
}
}

View File

@ -56,7 +56,6 @@
<Compile Include="Configuration\Arguments.cs" />
<Compile Include="Configuration\Instance\FileConfigInstance.cs" />
<Compile Include="Configuration\ConfigManager.cs" />
<Compile Include="Configuration\Instance\IConfigInstance.cs" />
<Compile Include="Configuration\Instance\PluginConfigInstance.cs" />
<Compile Include="Configuration\LockManager.cs" />
<Compile Include="Configuration\SystemConfig.cs" />

View File

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
namespace TweetLib.Core.Features.Configuration{
public abstract class BaseConfig{
private readonly IConfigManager configManager;
protected BaseConfig(IConfigManager configManager){
this.configManager = configManager;
}
// Management
public void Save(){
configManager.GetInstanceInfo(this).Save();
}
public void Reload(){
configManager.GetInstanceInfo(this).Reload();
}
public void Reset(){
configManager.GetInstanceInfo(this).Reset();
}
// Construction methods
public T ConstructWithDefaults<T>() where T : BaseConfig{
return (T)ConstructWithDefaults(configManager);
}
protected abstract BaseConfig ConstructWithDefaults(IConfigManager configManager);
// Utility methods
protected void UpdatePropertyWithEvent<T>(ref T field, T value, EventHandler eventHandler){
if (!EqualityComparer<T>.Default.Equals(field, value)){
field = value;
eventHandler?.Invoke(this, EventArgs.Empty);
}
}
protected void UpdatePropertyWithRestartRequest<T>(ref T field, T value){
if (!EqualityComparer<T>.Default.Equals(field, value)){
field = value;
configManager.TriggerProgramRestartRequested();
}
}
}
}

View File

@ -1,5 +1,5 @@
namespace TweetDuck.Configuration.Instance{
interface IConfigInstance<out T>{
namespace TweetLib.Core.Features.Configuration{
public interface IConfigInstance<out T>{
T Instance { get; }
void Save();

View File

@ -0,0 +1,6 @@
namespace TweetLib.Core.Features.Configuration{
public interface IConfigManager{
void TriggerProgramRestartRequested();
IConfigInstance<BaseConfig> GetInstanceInfo(BaseConfig instance);
}
}