From 3ca6324156ec3407e232a12688c2670b8ea58e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igr=20Alex=C3=A1nder=20Fern=C3=A1ndez=20Sa=C3=BAco?= Date: Wed, 21 Mar 2018 22:57:57 -0500 Subject: [PATCH 1/2] (+) #1027 Allow configuration service to choose path format --- doc/history.txt | 1 + .../Configuration/ConfigurationService.cs | 75 ++++++++++++++----- .../Interfaces/IConfigurationService.cs | 12 +++ 3 files changed, 69 insertions(+), 19 deletions(-) diff --git a/doc/history.txt b/doc/history.txt index e4b5a5f3e..5ad29967e 100644 --- a/doc/history.txt +++ b/doc/history.txt @@ -38,6 +38,7 @@ Classes / members marked as obsolete: Added/fixed: ============ +(+) #1027 Allow configuration service to choose path format (*) #1166 Nesting with ChildAwareModelBase now supports more than one layer Roadmap: diff --git a/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs b/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs index 42984ab0c..c7dbd64a1 100644 --- a/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs +++ b/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs @@ -34,6 +34,10 @@ namespace Catel.Configuration /// public partial class ConfigurationService : IConfigurationService { + private static readonly string DefaultLocalConfigFilePath = Path.Combine(Path.GetApplicationDataDirectory(Catel.IO.ApplicationDataTarget.UserLocal), "configuration.xml"); + + private static readonly string DefaultRoamingConfigFilePath = Path.Combine(Path.GetApplicationDataDirectory(Catel.IO.ApplicationDataTarget.UserRoaming), "configuration.xml"); + private static readonly ILog Log = LogManager.GetCurrentClassLogger(); private readonly ISerializationManager _serializationManager; @@ -41,11 +45,11 @@ public partial class ConfigurationService : IConfigurationService private readonly ISerializer _serializer; #if NET || NETSTANDARD - private readonly DynamicConfiguration _localConfiguration; - private readonly DynamicConfiguration _roamingConfiguration; + private DynamicConfiguration _localConfiguration; + private DynamicConfiguration _roamingConfiguration; - private readonly string _localConfigFilePath; - private readonly string _roamingConfigFilePath; + private string _localConfigFilePath; + private string _roamingConfigFilePath; #elif ANDROID private readonly global::Android.Content.ISharedPreferences _preferences = global::Android.Preferences.PreferenceManager.GetDefaultSharedPreferences(global::Android.App.Application.Context); @@ -84,50 +88,83 @@ public partial class ConfigurationService : IConfigurationService _serializer = serializer; #if NET || NETSTANDARD - _localConfigFilePath = Path.Combine(Path.GetApplicationDataDirectory(Catel.IO.ApplicationDataTarget.UserLocal), "configuration.xml"); + SetLocalConfigFilePath(DefaultLocalConfigFilePath); + SetRoamingConfigFilePath(DefaultRoamingConfigFilePath); +#endif + } + + /// + /// Sets the roaming config file path. + /// + /// The file path. + public void SetRoamingConfigFilePath(string filePath) + { + Argument.IsNotNullOrEmpty(nameof(filePath), filePath); + + _roamingConfigFilePath = filePath; try { - if (File.Exists(_localConfigFilePath)) + if (File.Exists(_roamingConfigFilePath)) { - using (var fileStream = new FileStream(_localConfigFilePath, FileMode.Open)) + using (var fileStream = new FileStream(_roamingConfigFilePath, FileMode.Open)) { - _localConfiguration = SavableModelBase.Load(fileStream, _serializer); + _roamingConfiguration = SavableModelBase.Load(fileStream, _serializer); } } + else + { + _roamingConfiguration?.SaveAsXml(_roamingConfigFilePath); + } } catch (Exception ex) { - Log.Error(ex, "Failed to load local configuration, using default settings"); + Log.Error(ex, "Failed to load roaming configuration, using default settings"); + + _roamingConfigFilePath = DefaultRoamingConfigFilePath; } - if (_localConfiguration == null) + if (_roamingConfiguration == null) { - _localConfiguration = new DynamicConfiguration(); + _roamingConfiguration = new DynamicConfiguration(); } + } + + /// + /// Sets the roaming config file path. + /// + /// The file path. + public void SetLocalConfigFilePath(string filePath) + { + Argument.IsNotNullOrEmpty(nameof(filePath), filePath); - _roamingConfigFilePath = Path.Combine(Path.GetApplicationDataDirectory(Catel.IO.ApplicationDataTarget.UserRoaming), "configuration.xml"); + _localConfigFilePath = filePath; try { - if (File.Exists(_roamingConfigFilePath)) + if (File.Exists(_localConfigFilePath)) { - using (var fileStream = new FileStream(_roamingConfigFilePath, FileMode.Open)) + using (var fileStream = new FileStream(_localConfigFilePath, FileMode.Open)) { - _roamingConfiguration = SavableModelBase.Load(fileStream, _serializer); + _localConfiguration = SavableModelBase.Load(fileStream, _serializer); } } + else + { + _localConfiguration?.SaveAsXml(_localConfigFilePath); + } } catch (Exception ex) { - Log.Error(ex, "Failed to load roaming configuration, using default settings"); + Log.Error(ex, "Failed to load local configuration, using default settings"); + + _localConfigFilePath = DefaultLocalConfigFilePath; } - if (_roamingConfiguration == null) + if (_localConfiguration == null) { - _roamingConfiguration = new DynamicConfiguration(); + _localConfiguration = new DynamicConfiguration(); } -#endif } #region Events diff --git a/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs b/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs index 69575344e..cb4e6cb72 100644 --- a/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs +++ b/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs @@ -63,5 +63,17 @@ public interface IConfigurationService /// The default value. /// The is null or whitespace. void InitializeValue(ConfigurationContainer container, string key, object defaultValue); + + /// + /// Sets the roaming config file path. + /// + /// The file path. + void SetRoamingConfigFilePath(string filePath); + + /// + /// Sets the local config file path. + /// + /// The file path. + void SetLocalConfigFilePath(string filePath); } } \ No newline at end of file From a13b6cde2880bcd0acb657f5eca8a26a890dab57 Mon Sep 17 00:00:00 2001 From: "alexander.fernandez" Date: Thu, 22 Mar 2018 10:10:22 -0400 Subject: [PATCH 2/2] Fix according with revision --- .../Configuration/ConfigurationService.cs | 158 +++++++++--------- .../Interfaces/IConfigurationService.cs | 2 + 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs b/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs index c7dbd64a1..38a91f61c 100644 --- a/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs +++ b/src/Catel.Core/Catel.Core.Shared/Configuration/ConfigurationService.cs @@ -93,88 +93,14 @@ public partial class ConfigurationService : IConfigurationService #endif } - /// - /// Sets the roaming config file path. - /// - /// The file path. - public void SetRoamingConfigFilePath(string filePath) - { - Argument.IsNotNullOrEmpty(nameof(filePath), filePath); - - _roamingConfigFilePath = filePath; - - try - { - if (File.Exists(_roamingConfigFilePath)) - { - using (var fileStream = new FileStream(_roamingConfigFilePath, FileMode.Open)) - { - _roamingConfiguration = SavableModelBase.Load(fileStream, _serializer); - } - } - else - { - _roamingConfiguration?.SaveAsXml(_roamingConfigFilePath); - } - } - catch (Exception ex) - { - Log.Error(ex, "Failed to load roaming configuration, using default settings"); - - _roamingConfigFilePath = DefaultRoamingConfigFilePath; - } - - if (_roamingConfiguration == null) - { - _roamingConfiguration = new DynamicConfiguration(); - } - } - - /// - /// Sets the roaming config file path. - /// - /// The file path. - public void SetLocalConfigFilePath(string filePath) - { - Argument.IsNotNullOrEmpty(nameof(filePath), filePath); - - _localConfigFilePath = filePath; - - try - { - if (File.Exists(_localConfigFilePath)) - { - using (var fileStream = new FileStream(_localConfigFilePath, FileMode.Open)) - { - _localConfiguration = SavableModelBase.Load(fileStream, _serializer); - } - } - else - { - _localConfiguration?.SaveAsXml(_localConfigFilePath); - } - } - catch (Exception ex) - { - Log.Error(ex, "Failed to load local configuration, using default settings"); - - _localConfigFilePath = DefaultLocalConfigFilePath; - } - - if (_localConfiguration == null) - { - _localConfiguration = new DynamicConfiguration(); - } - } - - #region Events +#region Events /// /// Occurs when the configuration has changed. /// public event EventHandler ConfigurationChanged; - #endregion +#endregion - #region Methods +#region Methods /// /// Suspends the notifications of this service until the returned object is disposed. /// @@ -299,6 +225,82 @@ public void InitializeValue(ConfigurationContainer container, string key, object } } +#if NET || NETSTANDARD + /// + /// Sets the roaming config file path. + /// + /// The file path. + public void SetRoamingConfigFilePath(string filePath) + { + Argument.IsNotNullOrEmpty(nameof(filePath), filePath); + + _roamingConfigFilePath = filePath; + + try + { + if (File.Exists(_roamingConfigFilePath)) + { + using (var fileStream = new FileStream(_roamingConfigFilePath, FileMode.Open)) + { + _roamingConfiguration = SavableModelBase.Load(fileStream, _serializer); + } + } + else + { + _roamingConfiguration?.SaveAsXml(_roamingConfigFilePath); + } + } + catch (Exception ex) + { + Log.Error(ex, "Failed to load roaming configuration, using default settings"); + + _roamingConfigFilePath = DefaultRoamingConfigFilePath; + } + + if (_roamingConfiguration == null) + { + _roamingConfiguration = new DynamicConfiguration(); + } + } + + /// + /// Sets the roaming config file path. + /// + /// The file path. + public void SetLocalConfigFilePath(string filePath) + { + Argument.IsNotNullOrEmpty(nameof(filePath), filePath); + + _localConfigFilePath = filePath; + + try + { + if (File.Exists(_localConfigFilePath)) + { + using (var fileStream = new FileStream(_localConfigFilePath, FileMode.Open)) + { + _localConfiguration = SavableModelBase.Load(fileStream, _serializer); + } + } + else + { + _localConfiguration?.SaveAsXml(_localConfigFilePath); + } + } + catch (Exception ex) + { + Log.Error(ex, "Failed to load local configuration, using default settings"); + + _localConfigFilePath = DefaultLocalConfigFilePath; + } + + if (_localConfiguration == null) + { + _localConfiguration = new DynamicConfiguration(); + } + } +#endif + /// /// Determines whether the specified key value exists in the configuration. /// @@ -410,6 +412,6 @@ private void RaiseConfigurationChanged(ConfigurationContainer container, string ConfigurationChanged.SafeInvoke(this, () => new ConfigurationChangedEventArgs(container, key, value)); } - #endregion +#endregion } } \ No newline at end of file diff --git a/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs b/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs index cb4e6cb72..caed89cb3 100644 --- a/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs +++ b/src/Catel.Core/Catel.Core.Shared/Configuration/Interfaces/IConfigurationService.cs @@ -64,6 +64,7 @@ public interface IConfigurationService /// The is null or whitespace. void InitializeValue(ConfigurationContainer container, string key, object defaultValue); +#if NET || NETSTANDARD /// /// Sets the roaming config file path. /// @@ -75,5 +76,6 @@ public interface IConfigurationService /// /// The file path. void SetLocalConfigFilePath(string filePath); +#endif } } \ No newline at end of file