diff --git a/Eve-O-Preview/Configuration/ConfigurationStorage.cs b/Eve-O-Preview/Configuration/ConfigurationStorage.cs index 513b73e..be5b229 100644 --- a/Eve-O-Preview/Configuration/ConfigurationStorage.cs +++ b/Eve-O-Preview/Configuration/ConfigurationStorage.cs @@ -7,21 +7,23 @@ namespace EveOPreview.Configuration { private const string ConfigurationFileName = "EVE-O Preview.json"; - private readonly IAppConfig _configuration; + private readonly IThumbnailConfig _configuration; - public ConfigurationStorage(IAppConfig configuration) + public ConfigurationStorage(IThumbnailConfig configuration) { this._configuration = configuration; } public void Load() { - if (!File.Exists(ConfigurationStorage.ConfigurationFileName)) + string filename = this.GetConfigFileName(); + + if (!File.Exists(filename)) { return; } - string rawData = File.ReadAllText(ConfigurationStorage.ConfigurationFileName); + string rawData = File.ReadAllText(filename); JsonConvert.PopulateObject(rawData, this._configuration); @@ -33,7 +35,12 @@ namespace EveOPreview.Configuration { string rawData = JsonConvert.SerializeObject(this._configuration, Formatting.Indented); - File.WriteAllText(ConfigurationStorage.ConfigurationFileName, rawData); + File.WriteAllText(this.GetConfigFileName(), rawData); + } + + private string GetConfigFileName() + { + return string.IsNullOrEmpty(this._configuration.ConfigFileName) ? ConfigurationStorage.ConfigurationFileName : this._configuration.ConfigFileName; } } } \ No newline at end of file diff --git a/Eve-O-Preview/Configuration/IAppConfig.cs b/Eve-O-Preview/Configuration/IThumbnailConfig.cs similarity index 91% rename from Eve-O-Preview/Configuration/IAppConfig.cs rename to Eve-O-Preview/Configuration/IThumbnailConfig.cs index 5e2cd81..88a75c1 100644 --- a/Eve-O-Preview/Configuration/IAppConfig.cs +++ b/Eve-O-Preview/Configuration/IThumbnailConfig.cs @@ -3,8 +3,10 @@ using System.Windows.Forms; namespace EveOPreview.Configuration { - public interface IAppConfig + public interface IThumbnailConfig { + string ConfigFileName { get; set; } + bool MinimizeToTray { get; set; } int ThumbnailRefreshPeriod { get; set; } diff --git a/Eve-O-Preview/Configuration/AppConfig.cs b/Eve-O-Preview/Configuration/ThumbnailConfig.cs similarity index 83% rename from Eve-O-Preview/Configuration/AppConfig.cs rename to Eve-O-Preview/Configuration/ThumbnailConfig.cs index f78f891..337dd30 100644 --- a/Eve-O-Preview/Configuration/AppConfig.cs +++ b/Eve-O-Preview/Configuration/ThumbnailConfig.cs @@ -5,11 +5,13 @@ using Newtonsoft.Json; namespace EveOPreview.Configuration { - public class AppConfig : IAppConfig + public class ThumbnailConfig : IThumbnailConfig { - public AppConfig() + public ThumbnailConfig() { // Default values + this.ConfigFileName = null; + this.MinimizeToTray = false; this.ThumbnailRefreshPeriod = 500; @@ -41,6 +43,9 @@ namespace EveOPreview.Configuration this.ClientHotkey = new Dictionary(); } + [JsonIgnore] + public string ConfigFileName { get; set; } + public bool MinimizeToTray { get; set; } public int ThumbnailRefreshPeriod { get; set; } @@ -163,11 +168,11 @@ namespace EveOPreview.Configuration /// public void ApplyRestrictions() { - this.ThumbnailRefreshPeriod = AppConfig.ApplyRestrictions(this.ThumbnailRefreshPeriod, 300, 1000); - this.ThumbnailSize = new Size(AppConfig.ApplyRestrictions(this.ThumbnailSize.Width, this.ThumbnailMinimumSize.Width, this.ThumbnailMaximumSize.Width), - AppConfig.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height)); - this.ThumbnailOpacity = AppConfig.ApplyRestrictions((int)(this.ThumbnailOpacity * 100.00), 20, 100) / 100.00; - this.ThumbnailZoomFactor = AppConfig.ApplyRestrictions(this.ThumbnailZoomFactor, 2, 10); + this.ThumbnailRefreshPeriod = ThumbnailConfig.ApplyRestrictions(this.ThumbnailRefreshPeriod, 300, 1000); + this.ThumbnailSize = new Size(ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Width, this.ThumbnailMinimumSize.Width, this.ThumbnailMaximumSize.Width), + ThumbnailConfig.ApplyRestrictions(this.ThumbnailSize.Height, this.ThumbnailMinimumSize.Height, this.ThumbnailMaximumSize.Height)); + this.ThumbnailOpacity = ThumbnailConfig.ApplyRestrictions((int)(this.ThumbnailOpacity * 100.00), 20, 100) / 100.00; + this.ThumbnailZoomFactor = ThumbnailConfig.ApplyRestrictions(this.ThumbnailZoomFactor, 2, 10); } private static int ApplyRestrictions(int value, int minimum, int maximum) diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index ca46da0..84b350d 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -97,7 +97,7 @@ - + @@ -118,7 +118,7 @@ - + diff --git a/Eve-O-Preview/Presentation/MainPresenter.cs b/Eve-O-Preview/Presentation/MainPresenter.cs index 12dad20..71b9d68 100644 --- a/Eve-O-Preview/Presentation/MainPresenter.cs +++ b/Eve-O-Preview/Presentation/MainPresenter.cs @@ -13,7 +13,7 @@ namespace EveOPreview.UI #endregion #region Private fields - private readonly IAppConfig _configuration; + private readonly IThumbnailConfig _configuration; private readonly IConfigurationStorage _configurationStorage; private readonly IThumbnailDescriptionViewFactory _thumbnailDescriptionViewFactory; private readonly IDictionary _thumbnailDescriptionViews; @@ -22,7 +22,7 @@ namespace EveOPreview.UI private bool _exitApplication; #endregion - public MainPresenter(IApplicationController controller, IMainView view, IAppConfig configuration, IConfigurationStorage configurationStorage, + public MainPresenter(IApplicationController controller, IMainView view, IThumbnailConfig configuration, IConfigurationStorage configurationStorage, IThumbnailManager thumbnailManager, IThumbnailDescriptionViewFactory thumbnailDescriptionViewFactory) : base(controller, view) { diff --git a/Eve-O-Preview/Presentation/ThumbnailManager.cs b/Eve-O-Preview/Presentation/ThumbnailManager.cs index b5d7876..7d513e4 100644 --- a/Eve-O-Preview/Presentation/ThumbnailManager.cs +++ b/Eve-O-Preview/Presentation/ThumbnailManager.cs @@ -15,7 +15,7 @@ namespace EveOPreview.UI #endregion #region Private fields - private readonly IAppConfig _configuration; + private readonly IThumbnailConfig _configuration; private readonly DispatcherTimer _thumbnailUpdateTimer; private readonly IThumbnailViewFactory _thumbnailViewFactory; private readonly Dictionary _thumbnailViews; @@ -27,7 +27,7 @@ namespace EveOPreview.UI private bool _isHoverEffectActive; #endregion - public ThumbnailManager(IAppConfig configuration, IThumbnailViewFactory factory) + public ThumbnailManager(IThumbnailConfig configuration, IThumbnailViewFactory factory) { this._configuration = configuration; this._thumbnailViewFactory = factory; diff --git a/Eve-O-Preview/Program.cs b/Eve-O-Preview/Program.cs index da22a50..574e80d 100644 --- a/Eve-O-Preview/Program.cs +++ b/Eve-O-Preview/Program.cs @@ -7,9 +7,11 @@ namespace EveOPreview { static class Program { + private static string ConfigParameterName = "--config:"; + /// The main entry point for the application. [STAThread] - static void Main() + static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); @@ -29,9 +31,41 @@ namespace EveOPreview .RegisterService() .RegisterService() .RegisterService() - .RegisterInstance(new AppConfig()); + .RegisterInstance(new ThumbnailConfig()); + + controller.Create().ConfigFileName = Program.GetCustomConfigFile(args); controller.Run(); } + + // Parse startup parameters + // Simple approach is used because something like NParams would be an overkill here + private static string GetCustomConfigFile(string[] args) + { + string configFile = null; + foreach (string arg in args) + { + if ((arg.Length <= Program.ConfigParameterName.Length) || !arg.StartsWith(Program.ConfigParameterName, StringComparison.Ordinal)) + { + continue; + } + + configFile = arg.Substring(Program.ConfigParameterName.Length); + break; + } + + if (string.IsNullOrEmpty(configFile)) + { + return ""; + } + + // One more check to drop trailing " + if ((configFile.Length > 3) && (configFile[0] == '"') && (configFile[configFile.Length - 1] == '"')) + { + configFile = configFile.Substring(1, configFile.Length - 2); + } + + return configFile; + } } } \ No newline at end of file