|
@@ -1,6 +1,7 @@
|
|
|
using System;
|
|
|
using System.Collections.Concurrent;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Globalization;
|
|
|
using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Threading;
|
|
@@ -19,11 +20,44 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
/// </summary>
|
|
|
public abstract class BaseConfigurationManager : IConfigurationManager
|
|
|
{
|
|
|
+ private readonly IFileSystem _fileSystem;
|
|
|
+
|
|
|
+ private readonly ConcurrentDictionary<string, object> _configurations = new ConcurrentDictionary<string, object>();
|
|
|
+
|
|
|
+ private ConfigurationStore[] _configurationStores = Array.Empty<ConfigurationStore>();
|
|
|
+ private IConfigurationFactory[] _configurationFactories = Array.Empty<IConfigurationFactory>();
|
|
|
+
|
|
|
/// <summary>
|
|
|
- /// Gets the type of the configuration.
|
|
|
+ /// The _configuration loaded.
|
|
|
/// </summary>
|
|
|
- /// <value>The type of the configuration.</value>
|
|
|
- protected abstract Type ConfigurationType { get; }
|
|
|
+ private bool _configurationLoaded;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// The _configuration sync lock.
|
|
|
+ /// </summary>
|
|
|
+ private object _configurationSyncLock = new object();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// The _configuration.
|
|
|
+ /// </summary>
|
|
|
+ private BaseApplicationConfiguration _configuration;
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="applicationPaths">The application paths.</param>
|
|
|
+ /// <param name="loggerFactory">The logger factory.</param>
|
|
|
+ /// <param name="xmlSerializer">The XML serializer.</param>
|
|
|
+ /// <param name="fileSystem">The file system</param>
|
|
|
+ protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
|
|
|
+ {
|
|
|
+ CommonApplicationPaths = applicationPaths;
|
|
|
+ XmlSerializer = xmlSerializer;
|
|
|
+ _fileSystem = fileSystem;
|
|
|
+ Logger = loggerFactory.CreateLogger(GetType().Name);
|
|
|
+
|
|
|
+ UpdateCachePath();
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// Occurs when [configuration updated].
|
|
@@ -40,6 +74,12 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
/// </summary>
|
|
|
public event EventHandler<ConfigurationUpdateEventArgs> NamedConfigurationUpdated;
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Gets the type of the configuration.
|
|
|
+ /// </summary>
|
|
|
+ /// <value>The type of the configuration.</value>
|
|
|
+ protected abstract Type ConfigurationType { get; }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Gets the logger.
|
|
|
/// </summary>
|
|
@@ -56,20 +96,7 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
/// </summary>
|
|
|
/// <value>The application paths.</value>
|
|
|
public IApplicationPaths CommonApplicationPaths { get; private set; }
|
|
|
- public readonly IFileSystem FileSystem;
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// The _configuration loaded
|
|
|
- /// </summary>
|
|
|
- private bool _configurationLoaded;
|
|
|
- /// <summary>
|
|
|
- /// The _configuration sync lock
|
|
|
- /// </summary>
|
|
|
- private object _configurationSyncLock = new object();
|
|
|
- /// <summary>
|
|
|
- /// The _configuration
|
|
|
- /// </summary>
|
|
|
- private BaseApplicationConfiguration _configuration;
|
|
|
/// <summary>
|
|
|
/// Gets the system configuration
|
|
|
/// </summary>
|
|
@@ -90,26 +117,6 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private ConfigurationStore[] _configurationStores = { };
|
|
|
- private IConfigurationFactory[] _configurationFactories = { };
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
|
|
|
- /// </summary>
|
|
|
- /// <param name="applicationPaths">The application paths.</param>
|
|
|
- /// <param name="loggerFactory">The logger factory.</param>
|
|
|
- /// <param name="xmlSerializer">The XML serializer.</param>
|
|
|
- /// <param name="fileSystem">The file system</param>
|
|
|
- protected BaseConfigurationManager(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer, IFileSystem fileSystem)
|
|
|
- {
|
|
|
- CommonApplicationPaths = applicationPaths;
|
|
|
- XmlSerializer = xmlSerializer;
|
|
|
- FileSystem = fileSystem;
|
|
|
- Logger = loggerFactory.CreateLogger(GetType().Name);
|
|
|
-
|
|
|
- UpdateCachePath();
|
|
|
- }
|
|
|
-
|
|
|
public virtual void AddParts(IEnumerable<IConfigurationFactory> factories)
|
|
|
{
|
|
|
_configurationFactories = factories.ToArray();
|
|
@@ -171,6 +178,7 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
private void UpdateCachePath()
|
|
|
{
|
|
|
string cachePath;
|
|
|
+
|
|
|
// If the configuration file has no entry (i.e. not set in UI)
|
|
|
if (string.IsNullOrWhiteSpace(CommonConfiguration.CachePath))
|
|
|
{
|
|
@@ -207,12 +215,16 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
var newPath = newConfig.CachePath;
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(newPath)
|
|
|
- && !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath))
|
|
|
+ && !string.Equals(CommonConfiguration.CachePath ?? string.Empty, newPath, StringComparison.Ordinal))
|
|
|
{
|
|
|
// Validate
|
|
|
if (!Directory.Exists(newPath))
|
|
|
{
|
|
|
- throw new FileNotFoundException(string.Format("{0} does not exist.", newPath));
|
|
|
+ throw new FileNotFoundException(
|
|
|
+ string.Format(
|
|
|
+ CultureInfo.InvariantCulture,
|
|
|
+ "{0} does not exist.",
|
|
|
+ newPath));
|
|
|
}
|
|
|
|
|
|
EnsureWriteAccess(newPath);
|
|
@@ -223,11 +235,9 @@ namespace Emby.Server.Implementations.AppBase
|
|
|
{
|
|
|
var file = Path.Combine(path, Guid.NewGuid().ToString());
|
|
|
File.WriteAllText(file, string.Empty);
|
|
|
- FileSystem.DeleteFile(file);
|
|
|
+ _fileSystem.DeleteFile(file);
|
|
|
}
|
|
|
|
|
|
- private readonly ConcurrentDictionary<string, object> _configurations = new ConcurrentDictionary<string, object>();
|
|
|
-
|
|
|
private string GetConfigurationFile(string key)
|
|
|
{
|
|
|
return Path.Combine(CommonApplicationPaths.ConfigurationDirectoryPath, key.ToLowerInvariant() + ".xml");
|