Allow users to have multiple configuration files

This commit is contained in:
Anton Kasyanov
2016-10-15 21:37:18 +03:00
parent 278ab21592
commit 5e87beadd1
7 changed files with 41 additions and 18 deletions

View File

@@ -0,0 +1,13 @@
namespace EveOPreview.Configuration
{
class AppConfig : IAppConfig
{
public AppConfig()
{
// Default values
this.ConfigFileName = null;
}
public string ConfigFileName { get; set; }
}
}

View File

@@ -3,15 +3,17 @@ using Newtonsoft.Json;
namespace EveOPreview.Configuration namespace EveOPreview.Configuration
{ {
public class ConfigurationStorage : IConfigurationStorage class ConfigurationStorage : IConfigurationStorage
{ {
private const string ConfigurationFileName = "EVE-O Preview.json"; private const string ConfigurationFileName = "EVE-O Preview.json";
private readonly IThumbnailConfig _configuration; private readonly IAppConfig _appConfig;
private readonly IThumbnailConfig _thumbnailConfig;
public ConfigurationStorage(IThumbnailConfig configuration) public ConfigurationStorage(IAppConfig appConfig, IThumbnailConfig thumbnailConfig)
{ {
this._configuration = configuration; this._appConfig = appConfig;
this._thumbnailConfig = thumbnailConfig;
} }
public void Load() public void Load()
@@ -25,22 +27,22 @@ namespace EveOPreview.Configuration
string rawData = File.ReadAllText(filename); string rawData = File.ReadAllText(filename);
JsonConvert.PopulateObject(rawData, this._configuration); JsonConvert.PopulateObject(rawData, this._thumbnailConfig);
// Validate data after loading it // Validate data after loading it
this._configuration.ApplyRestrictions(); this._thumbnailConfig.ApplyRestrictions();
} }
public void Save() public void Save()
{ {
string rawData = JsonConvert.SerializeObject(this._configuration, Formatting.Indented); string rawData = JsonConvert.SerializeObject(this._thumbnailConfig, Formatting.Indented);
File.WriteAllText(this.GetConfigFileName(), rawData); File.WriteAllText(this.GetConfigFileName(), rawData);
} }
private string GetConfigFileName() private string GetConfigFileName()
{ {
return string.IsNullOrEmpty(this._configuration.ConfigFileName) ? ConfigurationStorage.ConfigurationFileName : this._configuration.ConfigFileName; return string.IsNullOrEmpty(this._appConfig.ConfigFileName) ? ConfigurationStorage.ConfigurationFileName : this._appConfig.ConfigFileName;
} }
} }
} }

View File

@@ -0,0 +1,10 @@
namespace EveOPreview.Configuration
{
/// <summary>
/// Application configuration
/// </summary>
public interface IAppConfig
{
string ConfigFileName { get; set; }
}
}

View File

@@ -3,10 +3,11 @@ using System.Windows.Forms;
namespace EveOPreview.Configuration namespace EveOPreview.Configuration
{ {
/// <summary>
/// Thumbnails Manager configuration
/// </summary>
public interface IThumbnailConfig public interface IThumbnailConfig
{ {
string ConfigFileName { get; set; }
bool MinimizeToTray { get; set; } bool MinimizeToTray { get; set; }
int ThumbnailRefreshPeriod { get; set; } int ThumbnailRefreshPeriod { get; set; }

View File

@@ -5,13 +5,10 @@ using Newtonsoft.Json;
namespace EveOPreview.Configuration namespace EveOPreview.Configuration
{ {
public class ThumbnailConfig : IThumbnailConfig class ThumbnailConfig : IThumbnailConfig
{ {
public ThumbnailConfig() public ThumbnailConfig()
{ {
// Default values
this.ConfigFileName = null;
this.MinimizeToTray = false; this.MinimizeToTray = false;
this.ThumbnailRefreshPeriod = 500; this.ThumbnailRefreshPeriod = 500;
@@ -43,9 +40,6 @@ namespace EveOPreview.Configuration
this.ClientHotkey = new Dictionary<string, string>(); this.ClientHotkey = new Dictionary<string, string>();
} }
[JsonIgnore]
public string ConfigFileName { get; set; }
public bool MinimizeToTray { get; set; } public bool MinimizeToTray { get; set; }
public int ThumbnailRefreshPeriod { get; set; } public int ThumbnailRefreshPeriod { get; set; }

View File

@@ -96,7 +96,9 @@
<Compile Include="ApplicationBase\LightInjectContainer.cs" /> <Compile Include="ApplicationBase\LightInjectContainer.cs" />
<Compile Include="ApplicationBase\Presenter.cs" /> <Compile Include="ApplicationBase\Presenter.cs" />
<Compile Include="ApplicationBase\PresenterGeneric.cs" /> <Compile Include="ApplicationBase\PresenterGeneric.cs" />
<Compile Include="Configuration\AppConfig.cs" />
<Compile Include="Configuration\ConfigurationStorage.cs" /> <Compile Include="Configuration\ConfigurationStorage.cs" />
<Compile Include="Configuration\IAppConfig.cs" />
<Compile Include="Configuration\IThumbnailConfig.cs" /> <Compile Include="Configuration\IThumbnailConfig.cs" />
<Compile Include="Configuration\ZoomAnchor.cs" /> <Compile Include="Configuration\ZoomAnchor.cs" />
<Compile Include="DwmAPI\DWM_BLURBEHIND.cs" /> <Compile Include="DwmAPI\DWM_BLURBEHIND.cs" />

View File

@@ -31,9 +31,10 @@ namespace EveOPreview
.RegisterService<IThumbnailViewFactory, ThumbnailViewFactory>() .RegisterService<IThumbnailViewFactory, ThumbnailViewFactory>()
.RegisterService<IThumbnailDescriptionViewFactory, ThumbnailDescriptionViewFactory>() .RegisterService<IThumbnailDescriptionViewFactory, ThumbnailDescriptionViewFactory>()
.RegisterService<IConfigurationStorage, ConfigurationStorage>() .RegisterService<IConfigurationStorage, ConfigurationStorage>()
.RegisterInstance<IAppConfig>(new AppConfig())
.RegisterInstance<IThumbnailConfig>(new ThumbnailConfig()); .RegisterInstance<IThumbnailConfig>(new ThumbnailConfig());
controller.Create<IThumbnailConfig>().ConfigFileName = Program.GetCustomConfigFile(args); controller.Create<IAppConfig>().ConfigFileName = Program.GetCustomConfigFile(args);
controller.Run<MainPresenter>(); controller.Run<MainPresenter>();
} }