diff options
Diffstat (limited to 'MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs')
| -rw-r--r-- | MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs index 1b9146644..7bbc1abd7 100644 --- a/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs +++ b/MediaBrowser.Common.Implementations/Configuration/BaseConfigurationManager.cs @@ -9,6 +9,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; +using CommonIO; +using MediaBrowser.Common.Extensions; namespace MediaBrowser.Common.Implementations.Configuration { @@ -32,7 +34,7 @@ namespace MediaBrowser.Common.Implementations.Configuration /// Occurs when [configuration updating]. /// </summary> public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdating; - + /// <summary> /// Occurs when [named configuration updated]. /// </summary> @@ -54,6 +56,7 @@ namespace MediaBrowser.Common.Implementations.Configuration /// </summary> /// <value>The application paths.</value> public IApplicationPaths CommonApplicationPaths { get; private set; } + public readonly IFileSystem FileSystem; /// <summary> /// The _configuration loaded @@ -87,8 +90,8 @@ namespace MediaBrowser.Common.Implementations.Configuration } } - private ConfigurationStore[] _configurationStores = {}; - private IConfigurationFactory[] _configurationFactories = {}; + private ConfigurationStore[] _configurationStores = { }; + private IConfigurationFactory[] _configurationFactories = { }; /// <summary> /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class. @@ -96,10 +99,11 @@ namespace MediaBrowser.Common.Implementations.Configuration /// <param name="applicationPaths">The application paths.</param> /// <param name="logManager">The log manager.</param> /// <param name="xmlSerializer">The XML serializer.</param> - protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer) + protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer, IFileSystem fileSystem) { CommonApplicationPaths = applicationPaths; XmlSerializer = xmlSerializer; + FileSystem = fileSystem; Logger = logManager.GetLogger(GetType().Name); UpdateCachePath(); @@ -199,9 +203,19 @@ namespace MediaBrowser.Common.Implementations.Configuration { throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newPath)); } + + EnsureWriteAccess(newPath); } } + protected void EnsureWriteAccess(string path) + { + var file = Path.Combine(path, Guid.NewGuid().ToString()); + + FileSystem.WriteAllText(file, string.Empty); + FileSystem.DeleteFile(file); + } + private readonly ConcurrentDictionary<string, object> _configurations = new ConcurrentDictionary<string, object>(); private string GetConfigurationFile(string key) @@ -215,9 +229,15 @@ namespace MediaBrowser.Common.Implementations.Configuration { var file = GetConfigurationFile(key); - var configurationType = _configurationStores - .First(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase)) - .ConfigurationType; + var configurationInfo = _configurationStores + .FirstOrDefault(i => string.Equals(i.Key, key, StringComparison.OrdinalIgnoreCase)); + + if (configurationInfo == null) + { + throw new ResourceNotFoundException("Configuration with key " + key + " not found."); + } + + var configurationType = configurationInfo.ConfigurationType; lock (_configurationSyncLock) { @@ -272,7 +292,7 @@ namespace MediaBrowser.Common.Implementations.Configuration NewConfiguration = configuration }, Logger); - + _configurations.AddOrUpdate(key, configuration, (k, v) => configuration); var path = GetConfigurationFile(key); |
