1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-05-28 08:34:06 +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;
using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using TweetDuck.Configuration.Instance; using TweetDuck.Configuration.Instance;
using TweetDuck.Data; using TweetDuck.Data;
using TweetLib.Core.Features.Configuration;
using TweetLib.Core.Serialization.Converters; using TweetLib.Core.Serialization.Converters;
using TweetLib.Core.Utils; using TweetLib.Core.Utils;
namespace TweetDuck.Configuration{ namespace TweetDuck.Configuration{
sealed class ConfigManager{ sealed class ConfigManager : IConfigManager{
public UserConfig User { get; } public UserConfig User { get; }
public SystemConfig System { get; } public SystemConfig System { get; }
public PluginConfig Plugins { get; } public PluginConfig Plugins { get; }
@ -70,59 +70,13 @@ public void ReloadAll(){
infoPlugins.Reload(); infoPlugins.Reload();
} }
private void TriggerProgramRestartRequested(){ void IConfigManager.TriggerProgramRestartRequested(){
ProgramRestartRequested?.Invoke(this, EventArgs.Empty); ProgramRestartRequested?.Invoke(this, EventArgs.Empty);
} }
private IConfigInstance<BaseConfig> GetInstanceInfo(BaseConfig instance){ IConfigInstance<BaseConfig> IConfigManager.GetInstanceInfo(BaseConfig instance){
Type instanceType = instance.GetType(); Type instanceType = instance.GetType();
return Array.Find(infoList, info => info.Instance.GetType() == instanceType); // TODO handle null 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;
using System.IO; using System.IO;
using TweetLib.Core.Features.Configuration;
using TweetLib.Core.Serialization; using TweetLib.Core.Serialization;
namespace TweetDuck.Configuration.Instance{ 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"; private const string ErrorTitle = "Configuration Error";
public T Instance { get; } public T Instance { get; }

View File

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

View File

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

View File

@ -1,5 +1,7 @@
namespace TweetDuck.Configuration{ using TweetLib.Core.Features.Configuration;
sealed class SystemConfig : ConfigManager.BaseConfig{
namespace TweetDuck.Configuration{
sealed class SystemConfig : BaseConfig{
// CONFIGURATION DATA // CONFIGURATION DATA
@ -17,9 +19,9 @@ public bool HardwareAcceleration{
// END OF CONFIG // 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); return new SystemConfig(configManager);
} }
} }

View File

@ -5,9 +5,10 @@
using TweetDuck.Core.Other; using TweetDuck.Core.Other;
using TweetDuck.Core.Utils; using TweetDuck.Core.Utils;
using TweetDuck.Data; using TweetDuck.Data;
using TweetLib.Core.Features.Configuration;
namespace TweetDuck.Configuration{ namespace TweetDuck.Configuration{
sealed class UserConfig : ConfigManager.BaseConfig{ sealed class UserConfig : BaseConfig{
// CONFIGURATION DATA // CONFIGURATION DATA
@ -135,9 +136,9 @@ public string SpellCheckLanguage{
// END OF CONFIG // 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); return new UserConfig(configManager);
} }
} }

View File

@ -56,7 +56,6 @@
<Compile Include="Configuration\Arguments.cs" /> <Compile Include="Configuration\Arguments.cs" />
<Compile Include="Configuration\Instance\FileConfigInstance.cs" /> <Compile Include="Configuration\Instance\FileConfigInstance.cs" />
<Compile Include="Configuration\ConfigManager.cs" /> <Compile Include="Configuration\ConfigManager.cs" />
<Compile Include="Configuration\Instance\IConfigInstance.cs" />
<Compile Include="Configuration\Instance\PluginConfigInstance.cs" /> <Compile Include="Configuration\Instance\PluginConfigInstance.cs" />
<Compile Include="Configuration\LockManager.cs" /> <Compile Include="Configuration\LockManager.cs" />
<Compile Include="Configuration\SystemConfig.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{ namespace TweetLib.Core.Features.Configuration{
interface IConfigInstance<out T>{ public interface IConfigInstance<out T>{
T Instance { get; } T Instance { get; }
void Save(); void Save();

View File

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