123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using MediaBrowser.Common.Configuration;
- using MediaBrowser.Common.Events;
- using MediaBrowser.Model.Configuration;
- using MediaBrowser.Model.Logging;
- using MediaBrowser.Model.Serialization;
- using System;
- using System.Threading;
- namespace MediaBrowser.Common.Implementations.Configuration
- {
- /// <summary>
- /// Class BaseConfigurationManager
- /// </summary>
- public abstract class BaseConfigurationManager : IConfigurationManager
- {
- /// <summary>
- /// Gets the type of the configuration.
- /// </summary>
- /// <value>The type of the configuration.</value>
- protected abstract Type ConfigurationType { get; }
- /// <summary>
- /// Occurs when [configuration updated].
- /// </summary>
- public event EventHandler<EventArgs> ConfigurationUpdated;
- /// <summary>
- /// Gets the logger.
- /// </summary>
- /// <value>The logger.</value>
- protected ILogger Logger { get; private set; }
- /// <summary>
- /// Gets the XML serializer.
- /// </summary>
- /// <value>The XML serializer.</value>
- protected IXmlSerializer XmlSerializer { get; private set; }
- /// <summary>
- /// Gets or sets the application paths.
- /// </summary>
- /// <value>The application paths.</value>
- public IApplicationPaths CommonApplicationPaths { get; private set; }
- /// <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>
- /// <value>The configuration.</value>
- public BaseApplicationConfiguration CommonConfiguration
- {
- get
- {
- // Lazy load
- LazyInitializer.EnsureInitialized(ref _configuration, ref _configurationLoaded, ref _configurationSyncLock, () => (BaseApplicationConfiguration)ConfigurationHelper.GetXmlConfiguration(ConfigurationType, CommonApplicationPaths.SystemConfigurationFilePath, XmlSerializer));
- return _configuration;
- }
- protected set
- {
- _configuration = value;
- _configurationLoaded = value != null;
- }
- }
- /// <summary>
- /// Initializes a new instance of the <see cref="BaseConfigurationManager" /> class.
- /// </summary>
- /// <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)
- {
- CommonApplicationPaths = applicationPaths;
- XmlSerializer = xmlSerializer;
- Logger = logManager.GetLogger(GetType().Name);
- }
- /// <summary>
- /// The _save lock
- /// </summary>
- private readonly object _configurationSaveLock = new object();
- /// <summary>
- /// Saves the configuration.
- /// </summary>
- public void SaveConfiguration()
- {
- lock (_configurationSaveLock)
- {
- XmlSerializer.SerializeToFile(CommonConfiguration, CommonApplicationPaths.SystemConfigurationFilePath);
- }
- OnConfigurationUpdated();
- }
- /// <summary>
- /// Called when [configuration updated].
- /// </summary>
- protected virtual void OnConfigurationUpdated()
- {
- EventHelper.QueueEventIfNotNull(ConfigurationUpdated, this, EventArgs.Empty, Logger);
- }
- /// <summary>
- /// Replaces the configuration.
- /// </summary>
- /// <param name="newConfiguration">The new configuration.</param>
- /// <exception cref="System.ArgumentNullException">newConfiguration</exception>
- public virtual void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration)
- {
- if (newConfiguration == null)
- {
- throw new ArgumentNullException("newConfiguration");
- }
- CommonConfiguration = newConfiguration;
- SaveConfiguration();
- }
- }
- }
|