diff --git a/MediaBrowser.Common/Configuration/ApplicationPaths.cs b/MediaBrowser.Common/Configuration/ApplicationPaths.cs new file mode 100644 index 0000000000..1e1ecd85a1 --- /dev/null +++ b/MediaBrowser.Common/Configuration/ApplicationPaths.cs @@ -0,0 +1,162 @@ +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; + } + + } +} diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index cc3cb76f08..514c05097c 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -21,49 +21,6 @@ namespace MediaBrowser.Common.Kernel public abstract class BaseKernel : IDisposable where TConfigurationType : BaseApplicationConfiguration, new() { - /// - /// Gets the path to the program data folder - /// - public string ProgramDataPath { get; private set; } - - /// - /// Gets the path to the plugin directory - /// - protected string PluginsPath - { - get - { - return Path.Combine(ProgramDataPath, "plugins"); - } - } - - /// - /// Gets the path to the application configuration file - /// - protected string ConfigurationPath - { - get - { - return Path.Combine(ProgramDataPath, "config.js"); - } - } - - /// - /// Gets the path to the log directory - /// - private string LogDirectoryPath - { - get - { - return Path.Combine(ProgramDataPath, "logs"); - } - } - - /// - /// Gets or sets the path to the current log file - /// - private string LogFilePath { get; set; } - /// /// Gets the current configuration /// @@ -88,7 +45,7 @@ namespace MediaBrowser.Common.Kernel public BaseKernel() { - ProgramDataPath = GetProgramDataPath(); + } public virtual void Init(IProgress progress) @@ -102,18 +59,18 @@ namespace MediaBrowser.Common.Kernel ReloadComposableParts(); } + /// + /// Gets or sets the path to the current log file + /// + public static string LogFilePath { get; set; } + private void ReloadLogger() { DisposeLogger(); - if (!Directory.Exists(LogDirectoryPath)) - { - Directory.CreateDirectory(LogDirectoryPath); - } - DateTime now = DateTime.Now; - LogFilePath = Path.Combine(LogDirectoryPath, now.ToString("dMyyyy") + "-" + now.Ticks + ".log"); + LogFilePath = Path.Combine(ApplicationPaths.LogDirectoryPath, Assembly.GetExecutingAssembly().GetType().Name + "-" + now.ToString("dMyyyy") + "-" + now.Ticks + ".log"); FileStream fs = new FileStream(LogFilePath, FileMode.Append, FileAccess.Write, FileShare.Read); @@ -126,14 +83,9 @@ namespace MediaBrowser.Common.Kernel /// protected void ReloadComposableParts() { - if (!Directory.Exists(PluginsPath)) - { - Directory.CreateDirectory(PluginsPath); - } - // Gets all plugin assemblies by first reading all bytes of the .dll and calling Assembly.Load against that // This will prevent the .dll file from getting locked, and allow us to replace it when needed - IEnumerable pluginAssemblies = Directory.GetFiles(PluginsPath, "*.dll", SearchOption.AllDirectories).Select(f => Assembly.Load(File.ReadAllBytes((f)))); + IEnumerable pluginAssemblies = Directory.GetFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.AllDirectories).Select(f => Assembly.Load(File.ReadAllBytes((f)))); var catalog = new AggregateCatalog(pluginAssemblies.Select(a => new AssemblyCatalog(a))); //catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); @@ -172,7 +124,7 @@ namespace MediaBrowser.Common.Kernel AssemblyName assemblyName = assembly.GetName(); plugin.Version = assemblyName.Version; - plugin.Path = Path.Combine(PluginsPath, assemblyName.Name); + plugin.Path = Path.Combine(ApplicationPaths.PluginsPath, assemblyName.Name); plugin.Context = KernelContext; @@ -185,57 +137,34 @@ namespace MediaBrowser.Common.Kernel } } - /// - /// Gets the path to the application's ProgramDataFolder - /// - private 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; - } /// /// Reloads application configuration from the config file /// private void ReloadConfiguration() { - // Deserialize config - if (!File.Exists(ConfigurationPath)) - { - Configuration = new TConfigurationType(); - } - else - { - Configuration = JsonSerializer.DeserializeFromFile(ConfigurationPath); - } + //Configuration information for anything other than server-specific configuration will have to come via the API... -ebr - Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity; + //// Deserialize config + //if (!File.Exists(ConfigurationPath)) + //{ + // Configuration = new TConfigurationType(); + //} + //else + //{ + // Configuration = JsonSerializer.DeserializeFromFile(ConfigurationPath); + //} + + //Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity; } /// /// Saves the current application configuration to the config file /// - public void SaveConfiguration() - { - JsonSerializer.SerializeToFile(Configuration, ConfigurationPath); - } + //public void SaveConfiguration() + //{ + // JsonSerializer.SerializeToFile(Configuration, ConfigurationPath); + //} /// /// Restarts the Http Server, or starts it if not currently running @@ -255,7 +184,7 @@ namespace MediaBrowser.Common.Kernel AssemblyName assemblyName = new AssemblyName(args.Name); // Look for the .dll recursively within the plugins directory - string dll = Directory.GetFiles(PluginsPath, "*.dll", SearchOption.AllDirectories) + string dll = Directory.GetFiles(ApplicationPaths.PluginsPath, "*.dll", SearchOption.AllDirectories) .FirstOrDefault(f => Path.GetFileNameWithoutExtension(f) == assemblyName.Name); // If we found a matching assembly, load it now diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 7f0605f09a..21430001ca 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -48,6 +48,7 @@ + diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index ca7fd382ac..6d936f785d 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Configuration; @@ -34,17 +35,18 @@ namespace MediaBrowser.Controller { get { - return Path.Combine(ProgramDataPath, "Root"); + return ApplicationPaths.RootFolderPath; } } - private string UsersPath - { - get - { - return Path.Combine(ProgramDataPath, "Users"); - } - } + //gonna want to load this from the standard repository... -ebr + //private string UsersPath + //{ + // get + // { + // return Path.Combine(ProgramDataPath, "Users"); + // } + //} /// /// Gets the list of currently registered entity resolvers @@ -434,22 +436,24 @@ namespace MediaBrowser.Controller /// private IEnumerable GetAllUsers() { - if (!Directory.Exists(UsersPath)) - { - Directory.CreateDirectory(UsersPath); - } + //we'll get this from the standard repo... -ebr + + //if (!Directory.Exists(UsersPath)) + //{ + // Directory.CreateDirectory(UsersPath); + //} List list = new List(); - foreach (string folder in Directory.GetDirectories(UsersPath, "*", SearchOption.TopDirectoryOnly)) - { - User item = GetFromDirectory(folder); + //foreach (string folder in Directory.GetDirectories(UsersPath, "*", SearchOption.TopDirectoryOnly)) + //{ + // User item = GetFromDirectory(folder); - if (item != null) - { - list.Add(item); - } - } + // if (item != null) + // { + // list.Add(item); + // } + //} return list; } @@ -457,36 +461,36 @@ namespace MediaBrowser.Controller /// /// Gets a User from it's directory /// - private User GetFromDirectory(string path) - { - string file = Path.Combine(path, "user.js"); + //private User GetFromDirectory(string path) + //{ + // string file = Path.Combine(path, "user.js"); - return JsonSerializer.DeserializeFromFile(file); - } + // return JsonSerializer.DeserializeFromFile(file); + //} /// /// Creates a User with a given name /// - public User CreateUser(string name) - { - var now = DateTime.Now; + //public User CreateUser(string name) + //{ + // var now = DateTime.Now; - User user = new User() - { - Name = name, - Id = Guid.NewGuid(), - DateCreated = now, - DateModified = now - }; + // User user = new User() + // { + // Name = name, + // Id = Guid.NewGuid(), + // DateCreated = now, + // DateModified = now + // }; - user.Path = Path.Combine(UsersPath, user.Id.ToString()); + // user.Path = Path.Combine(UsersPath, user.Id.ToString()); - Directory.CreateDirectory(user.Path); + // Directory.CreateDirectory(user.Path); - JsonSerializer.SerializeToFile(user, Path.Combine(user.Path, "user.js")); + // JsonSerializer.SerializeToFile(user, Path.Combine(user.Path, "user.js")); - return user; - } + // return user; + //} } } diff --git a/MediaBrowser.sln b/MediaBrowser.sln index 078c998c04..61a20c2dcf 100644 --- a/MediaBrowser.sln +++ b/MediaBrowser.sln @@ -77,7 +77,4 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(Performance) = preSolution - HasPerformanceSessions = true - EndGlobalSection EndGlobal