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:
parent
dc31a34225
commit
fe2269c838
Configuration
TweetDuck.csprojlib/TweetLib.Core/Features/Configuration
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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; }
|
||||
|
@ -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>{
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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" />
|
||||
|
50
lib/TweetLib.Core/Features/Configuration/BaseConfig.cs
Normal file
50
lib/TweetLib.Core/Features/Configuration/BaseConfig.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
@ -0,0 +1,6 @@
|
||||
namespace TweetLib.Core.Features.Configuration{
|
||||
public interface IConfigManager{
|
||||
void TriggerProgramRestartRequested();
|
||||
IConfigInstance<BaseConfig> GetInstanceInfo(BaseConfig instance);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user