| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | 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);            }                         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 void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration)        {            if (newConfiguration == null)            {                throw new ArgumentNullException("newConfiguration");            }            CommonConfiguration = newConfiguration;            SaveConfiguration();        }    }}
 |