using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Implementations.Configuration; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; using System.IO; namespace MediaBrowser.Server.Implementations.Configuration { /// /// Class ServerConfigurationManager /// public class ServerConfigurationManager : BaseConfigurationManager, IServerConfigurationManager { /// /// Initializes a new instance of the class. /// /// The application paths. /// The log manager. /// The XML serializer. public ServerConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer) : base(applicationPaths, logManager, xmlSerializer) { UpdateItemsByNamePath(); } /// /// Gets the type of the configuration. /// /// The type of the configuration. protected override Type ConfigurationType { get { return typeof(ServerConfiguration); } } /// /// Gets the application paths. /// /// The application paths. public IServerApplicationPaths ApplicationPaths { get { return (IServerApplicationPaths)CommonApplicationPaths; } } /// /// Gets the configuration. /// /// The configuration. public ServerConfiguration Configuration { get { return (ServerConfiguration)CommonConfiguration; } } /// /// Called when [configuration updated]. /// protected override void OnConfigurationUpdated() { UpdateItemsByNamePath(); base.OnConfigurationUpdated(); } /// /// Updates the items by name path. /// private void UpdateItemsByNamePath() { if (!string.IsNullOrEmpty(Configuration.ItemsByNamePath)) { ApplicationPaths.ItemsByNamePath = Configuration.ItemsByNamePath; } } /// /// Replaces the configuration. /// /// The new configuration. /// public override void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration) { var newConfig = (ServerConfiguration) newConfiguration; var newIbnPath = newConfig.ItemsByNamePath; if (!string.IsNullOrWhiteSpace(newIbnPath) && !string.Equals(Configuration.ItemsByNamePath ?? string.Empty, newIbnPath)) { // Validate if (!Directory.Exists(newIbnPath)) { throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newConfig.ItemsByNamePath)); } } base.ReplaceConfiguration(newConfiguration); } } }