using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Configuration; using System.Reflection; namespace MediaBrowser.Common.Configuration { public static class ApplicationPaths { private static string _programDataPath; /// /// Gets the path to the program data folder /// public static string ProgramDataPath { get { if (_programDataPath == null) { _programDataPath = GetProgramDataPath(); InitDirectories(); //move this here so we don't have to check for existence on every directory reference } return _programDataPath; } } private static void InitDirectories() { if (!Directory.Exists(LogDirectoryPath)) { Directory.CreateDirectory(LogDirectoryPath); } if (!Directory.Exists(PluginsPath)) { Directory.CreateDirectory(PluginsPath); } if (!Directory.Exists(RootFolderPath)) { Directory.CreateDirectory(RootFolderPath); } if (!Directory.Exists(ConfigurationPath)) { Directory.CreateDirectory(ConfigurationPath); Directory.CreateDirectory(SystemConfigurationPath); Directory.CreateDirectory(DeviceConfigurationPath); Directory.CreateDirectory(UserConfigurationPath); } } /// /// Gets the path to the plugin directory /// public static string PluginsPath { get { return Path.Combine(ProgramDataPath, "plugins"); } } /// /// Gets the path to the application configuration root directory /// public static string ConfigurationPath { get { return Path.Combine(ProgramDataPath, "config"); } } /// /// Gets the path to the system configuration directory /// public static string SystemConfigurationPath { get { return Path.Combine(ConfigurationPath, "system"); } } /// /// Gets the path to the user configuration directory /// public static string UserConfigurationPath { get { return Path.Combine(ConfigurationPath, "user"); } } /// /// Gets the path to the device configuration directory /// public static string DeviceConfigurationPath { get { return Path.Combine(ConfigurationPath, "device"); } } /// /// Gets the path to the log directory /// public static string LogDirectoryPath { get { return Path.Combine(ProgramDataPath, "logs"); } } /// /// Gets the path to the root media directory /// public static string RootFolderPath { get { return Path.Combine(ProgramDataPath, "root"); } } /// /// Gets the path to the application's ProgramDataFolder /// private static string GetProgramDataPath() { string programDataPath = ConfigurationManager.AppSettings["ProgramDataPath"]; // If it's a relative path, e.g. "..\" if (!Path.IsPathRooted(programDataPath)) { string path = Assembly.GetExecutingAssembly().Location; path = Path.GetDirectoryName(path); programDataPath = Path.Combine(path, programDataPath); programDataPath = Path.GetFullPath(programDataPath); } if (!Directory.Exists(programDataPath)) { Directory.CreateDirectory(programDataPath); } return programDataPath; } } }