From 59a3dcc8c1c6b41560bd48507cfcf4f0ca0a8862 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sat, 18 Aug 2012 16:38:02 -0400 Subject: [PATCH] Slight re-work of ApplicationPaths so that we can have inherited versions for the UI and Server --- MediaBrowser.Api/ApiService.cs | 2 +- .../HttpHandlers/BaseMediaHandler.cs | 2 +- .../Configuration/ApplicationPaths.cs | 299 ------------------ .../Configuration/BaseApplicationPaths.cs | 133 ++++++++ MediaBrowser.Common/Kernel/BaseKernel.cs | 11 +- .../MediaBrowser.Common.csproj | 2 +- .../Serialization/XmlSerializer.cs | 25 +- .../Configuration/ServerApplicationPaths.cs | 154 +++++++++ MediaBrowser.Controller/Kernel.cs | 4 +- .../Library/ItemController.cs | 8 +- .../MediaBrowser.Controller.csproj | 1 + 11 files changed, 312 insertions(+), 329 deletions(-) delete mode 100644 MediaBrowser.Common/Configuration/ApplicationPaths.cs create mode 100644 MediaBrowser.Common/Configuration/BaseApplicationPaths.cs create mode 100644 MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs diff --git a/MediaBrowser.Api/ApiService.cs b/MediaBrowser.Api/ApiService.cs index 76a93d4bbc..891b728342 100644 --- a/MediaBrowser.Api/ApiService.cs +++ b/MediaBrowser.Api/ApiService.cs @@ -208,7 +208,7 @@ namespace MediaBrowser.Api { if (_FFMpegDirectory == null) { - _FFMpegDirectory = System.IO.Path.Combine(ApplicationPaths.ProgramDataPath, "ffmpeg"); + _FFMpegDirectory = System.IO.Path.Combine(Kernel.Instance.ApplicationPaths.ProgramDataPath, "ffmpeg"); if (!Directory.Exists(_FFMpegDirectory)) { diff --git a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs index fd85993c8e..334dc12b1e 100644 --- a/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/BaseMediaHandler.cs @@ -174,7 +174,7 @@ namespace MediaBrowser.Api.HttpHandlers process.StartInfo = startInfo; // FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory. - FileStream logStream = new FileStream(Path.Combine(ApplicationPaths.LogDirectoryPath, "ffmpeg-" + Guid.NewGuid().ToString() + ".txt"), FileMode.Create); + FileStream logStream = new FileStream(Path.Combine(Kernel.Instance.ApplicationPaths.LogDirectoryPath, "ffmpeg-" + Guid.NewGuid().ToString() + ".txt"), FileMode.Create); try { diff --git a/MediaBrowser.Common/Configuration/ApplicationPaths.cs b/MediaBrowser.Common/Configuration/ApplicationPaths.cs deleted file mode 100644 index efe6f0c9e0..0000000000 --- a/MediaBrowser.Common/Configuration/ApplicationPaths.cs +++ /dev/null @@ -1,299 +0,0 @@ -using System.Configuration; -using System.IO; -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(); - } - return _programDataPath; - } - } - - - private static string _pluginsPath; - /// - /// Gets the path to the plugin directory - /// - public static string PluginsPath - { - get - { - if (_pluginsPath == null) - { - _pluginsPath = Path.Combine(ProgramDataPath, "plugins"); - if (!Directory.Exists(_pluginsPath)) - { - Directory.CreateDirectory(_pluginsPath); - } - } - - return _pluginsPath; - } - } - - private static string _configurationPath; - /// - /// Gets the path to the application configuration root directory - /// - public static string ConfigurationPath - { - get - { - if (_configurationPath == null) - { - _configurationPath = Path.Combine(ProgramDataPath, "config"); - if (!Directory.Exists(_configurationPath)) - { - Directory.CreateDirectory(_configurationPath); - } - } - return _configurationPath; - } - } - - private static string _systemConfigurationPath; - /// - /// Gets the path to the system configuration directory - /// - public static string SystemConfigurationPath - { - get - { - if (_systemConfigurationPath == null) - { - _systemConfigurationPath = Path.Combine(ConfigurationPath, "system"); - if (!Directory.Exists(_systemConfigurationPath)) - { - Directory.CreateDirectory(_systemConfigurationPath); - } - } - return _systemConfigurationPath; - } - } - - private static string _userConfigurationPath; - /// - /// Gets the path to the user configuration directory - /// - public static string UserConfigurationPath - { - get - { - if (_userConfigurationPath == null) - { - _userConfigurationPath = Path.Combine(ConfigurationPath, "user"); - if (!Directory.Exists(_userConfigurationPath)) - { - Directory.CreateDirectory(_userConfigurationPath); - } - } - return _userConfigurationPath; - } - } - - private static string _deviceConfigurationPath; - /// - /// Gets the path to the device configuration directory - /// - public static string DeviceConfigurationPath - { - get - { - if (_deviceConfigurationPath == null) - { - _deviceConfigurationPath = Path.Combine(ConfigurationPath, "device"); - if (!Directory.Exists(_deviceConfigurationPath)) - { - Directory.CreateDirectory(_deviceConfigurationPath); - } - } - return _deviceConfigurationPath; - } - } - - private static string _logDirectoryPath; - /// - /// Gets the path to the log directory - /// - public static string LogDirectoryPath - { - get - { - if (_logDirectoryPath == null) - { - _logDirectoryPath = Path.Combine(ProgramDataPath, "logs"); - if (!Directory.Exists(_logDirectoryPath)) - { - Directory.CreateDirectory(_logDirectoryPath); - } - } - return _logDirectoryPath; - } - } - - private static string _rootFolderPath; - /// - /// Gets the path to the root media directory - /// - public static string RootFolderPath - { - get - { - if (_rootFolderPath == null) - { - _rootFolderPath = Path.Combine(ProgramDataPath, "root"); - if (!Directory.Exists(_rootFolderPath)) - { - Directory.CreateDirectory(_rootFolderPath); - } - } - return _rootFolderPath; - } - } - - private static string _ibnPath; - /// - /// Gets the path to the Images By Name directory - /// - public static string ImagesByNamePath - { - get - { - if (_ibnPath == null) - { - _ibnPath = Path.Combine(ProgramDataPath, "ImagesByName"); - if (!Directory.Exists(_ibnPath)) - { - Directory.CreateDirectory(_ibnPath); - } - } - - return _ibnPath; - } - } - - private static string _PeoplePath; - /// - /// Gets the path to the People directory - /// - public static string PeoplePath - { - get - { - if (_PeoplePath == null) - { - _PeoplePath = Path.Combine(ImagesByNamePath, "People"); - if (!Directory.Exists(_PeoplePath)) - { - Directory.CreateDirectory(_PeoplePath); - } - } - - return _PeoplePath; - } - } - - private static string _GenrePath; - /// - /// Gets the path to the Genre directory - /// - public static string GenrePath - { - get - { - if (_GenrePath == null) - { - _GenrePath = Path.Combine(ImagesByNamePath, "Genre"); - if (!Directory.Exists(_GenrePath)) - { - Directory.CreateDirectory(_GenrePath); - } - } - - return _GenrePath; - } - } - - private static string _StudioPath; - /// - /// Gets the path to the Studio directory - /// - public static string StudioPath - { - get - { - if (_StudioPath == null) - { - _StudioPath = Path.Combine(ImagesByNamePath, "Studio"); - if (!Directory.Exists(_StudioPath)) - { - Directory.CreateDirectory(_StudioPath); - } - } - - return _StudioPath; - } - } - - private static string _yearPath; - /// - /// Gets the path to the Year directory - /// - public static string YearPath - { - get - { - if (_yearPath == null) - { - _yearPath = Path.Combine(ImagesByNamePath, "Year"); - if (!Directory.Exists(_yearPath)) - { - Directory.CreateDirectory(_yearPath); - } - } - - return _yearPath; - } - } - - /// - /// 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/Configuration/BaseApplicationPaths.cs b/MediaBrowser.Common/Configuration/BaseApplicationPaths.cs new file mode 100644 index 0000000000..ae45280136 --- /dev/null +++ b/MediaBrowser.Common/Configuration/BaseApplicationPaths.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using System.Configuration; +using System.Reflection; + +namespace MediaBrowser.Common.Configuration +{ + public abstract class BaseApplicationPaths + { + private string _programDataPath; + /// + /// Gets the path to the program data folder + /// + public string ProgramDataPath + { + get + { + if (_programDataPath == null) + { + _programDataPath = GetProgramDataPath(); + } + return _programDataPath; + } + } + + private string _pluginsPath; + /// + /// Gets the path to the plugin directory + /// + public string PluginsPath + { + get + { + if (_pluginsPath == null) + { + _pluginsPath = Path.Combine(ProgramDataPath, "plugins"); + if (!Directory.Exists(_pluginsPath)) + { + Directory.CreateDirectory(_pluginsPath); + } + } + + return _pluginsPath; + } + } + + private string _logDirectoryPath; + /// + /// Gets the path to the log directory + /// + public string LogDirectoryPath + { + get + { + if (_logDirectoryPath == null) + { + _logDirectoryPath = Path.Combine(ProgramDataPath, "logs"); + if (!Directory.Exists(_logDirectoryPath)) + { + Directory.CreateDirectory(_logDirectoryPath); + } + } + return _logDirectoryPath; + } + } + + private string _configurationDirectoryPath; + /// + /// Gets the path to the application configuration root directory + /// + public string ConfigurationDirectoryPath + { + get + { + if (_configurationDirectoryPath == null) + { + _configurationDirectoryPath = Path.Combine(ProgramDataPath, "config"); + if (!Directory.Exists(_configurationDirectoryPath)) + { + Directory.CreateDirectory(_configurationDirectoryPath); + } + } + return _configurationDirectoryPath; + } + } + + private string _systemConfigurationFilePath; + /// + /// Gets the path to the system configuration file + /// + public string SystemConfigurationFilePath + { + get + { + if (_systemConfigurationFilePath == null) + { + _systemConfigurationFilePath = Path.Combine(ConfigurationDirectoryPath, "system.xml"); + } + return _systemConfigurationFilePath; + } + } + + /// + /// 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 6e24fcfc27..ecfe11e2cb 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -18,14 +18,17 @@ namespace MediaBrowser.Common.Kernel /// /// Represents a shared base kernel for both the UI and server apps /// - public abstract class BaseKernel : IDisposable + public abstract class BaseKernel : IDisposable where TConfigurationType : BaseApplicationConfiguration, new() + where TApplicationPathsType : BaseApplicationPaths, new() { /// /// Gets the current configuration /// public TConfigurationType Configuration { get; private set; } + public TApplicationPathsType ApplicationPaths { get; private set; } + /// /// Gets the list of currently loaded plugins /// @@ -45,7 +48,7 @@ namespace MediaBrowser.Common.Kernel public BaseKernel() { - + ApplicationPaths = new TApplicationPathsType(); } public virtual void Init(IProgress progress) @@ -149,13 +152,13 @@ namespace MediaBrowser.Common.Kernel //Configuration information for anything other than server-specific configuration will have to come via the API... -ebr // Deserialize config - if (!File.Exists(ApplicationPaths.ConfigurationPath)) + if (!File.Exists(ApplicationPaths.SystemConfigurationFilePath)) { Configuration = new TConfigurationType(); } else { - Configuration = JsonSerializer.DeserializeFromFile(ApplicationPaths.ConfigurationPath); + Configuration = XmlSerializer.DeserializeFromFile(ApplicationPaths.SystemConfigurationFilePath); } Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity; diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 691787f1cd..f7ccc17786 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -61,8 +61,8 @@ - + diff --git a/MediaBrowser.Common/Serialization/XmlSerializer.cs b/MediaBrowser.Common/Serialization/XmlSerializer.cs index 924a7e8f41..45c416f3b0 100644 --- a/MediaBrowser.Common/Serialization/XmlSerializer.cs +++ b/MediaBrowser.Common/Serialization/XmlSerializer.cs @@ -1,5 +1,4 @@ -using System; -using System.IO; +using System.IO; namespace MediaBrowser.Common.Serialization { @@ -10,22 +9,14 @@ namespace MediaBrowser.Common.Serialization { public static void SerializeToStream(T obj, Stream stream) { - ServiceStack.Text.XmlSerializer.SerializeToStream(obj, stream); + GetSerializer().Serialize(stream, obj); } public static void SerializeToFile(T obj, string file) { - using (StreamWriter streamWriter = new StreamWriter(file)) + using (FileStream stream = new FileStream(file, FileMode.Create)) { - ServiceStack.Text.XmlSerializer.SerializeToWriter(obj, streamWriter); - } - } - - public static object DeserializeFromFile(Type type, string file) - { - using (Stream stream = File.OpenRead(file)) - { - return ServiceStack.Text.XmlSerializer.DeserializeFromStream(type, stream); + GetSerializer().Serialize(stream, obj); } } @@ -33,18 +24,18 @@ namespace MediaBrowser.Common.Serialization { using (Stream stream = File.OpenRead(file)) { - return ServiceStack.Text.XmlSerializer.DeserializeFromStream(stream); + return (T)GetSerializer().Deserialize(stream); } } public static T DeserializeFromStream(Stream stream) { - return ServiceStack.Text.XmlSerializer.DeserializeFromStream(stream); + return (T)GetSerializer().Deserialize(stream); } - public static T DeserializeFromString(string data) + private static System.Xml.Serialization.XmlSerializer GetSerializer() { - return ServiceStack.Text.XmlSerializer.DeserializeFromString(data); + return new System.Xml.Serialization.XmlSerializer(typeof(T)); } } } diff --git a/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs b/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs new file mode 100644 index 0000000000..bd33b19842 --- /dev/null +++ b/MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs @@ -0,0 +1,154 @@ +using System.IO; +using MediaBrowser.Common.Configuration; + +namespace MediaBrowser.Controller.Configuration +{ + public class ServerApplicationPaths : BaseApplicationPaths + { + private string _rootFolderPath; + /// + /// Gets the path to the root media directory + /// + public string RootFolderPath + { + get + { + if (_rootFolderPath == null) + { + _rootFolderPath = Path.Combine(ProgramDataPath, "root"); + if (!Directory.Exists(_rootFolderPath)) + { + Directory.CreateDirectory(_rootFolderPath); + } + } + return _rootFolderPath; + } + } + + private string _ibnPath; + /// + /// Gets the path to the Images By Name directory + /// + public string ImagesByNamePath + { + get + { + if (_ibnPath == null) + { + _ibnPath = Path.Combine(ProgramDataPath, "ImagesByName"); + if (!Directory.Exists(_ibnPath)) + { + Directory.CreateDirectory(_ibnPath); + } + } + + return _ibnPath; + } + } + + private string _PeoplePath; + /// + /// Gets the path to the People directory + /// + public string PeoplePath + { + get + { + if (_PeoplePath == null) + { + _PeoplePath = Path.Combine(ImagesByNamePath, "People"); + if (!Directory.Exists(_PeoplePath)) + { + Directory.CreateDirectory(_PeoplePath); + } + } + + return _PeoplePath; + } + } + + private string _GenrePath; + /// + /// Gets the path to the Genre directory + /// + public string GenrePath + { + get + { + if (_GenrePath == null) + { + _GenrePath = Path.Combine(ImagesByNamePath, "Genre"); + if (!Directory.Exists(_GenrePath)) + { + Directory.CreateDirectory(_GenrePath); + } + } + + return _GenrePath; + } + } + + private string _StudioPath; + /// + /// Gets the path to the Studio directory + /// + public string StudioPath + { + get + { + if (_StudioPath == null) + { + _StudioPath = Path.Combine(ImagesByNamePath, "Studio"); + if (!Directory.Exists(_StudioPath)) + { + Directory.CreateDirectory(_StudioPath); + } + } + + return _StudioPath; + } + } + + private string _yearPath; + /// + /// Gets the path to the Year directory + /// + public string YearPath + { + get + { + if (_yearPath == null) + { + _yearPath = Path.Combine(ImagesByNamePath, "Year"); + if (!Directory.Exists(_yearPath)) + { + Directory.CreateDirectory(_yearPath); + } + } + + return _yearPath; + } + } + + private string _userConfigurationDirectoryPath; + /// + /// Gets the path to the user configuration directory + /// + public string UserConfigurationDirectoryPath + { + get + { + if (_userConfigurationDirectoryPath == null) + { + _userConfigurationDirectoryPath = Path.Combine(ConfigurationDirectoryPath, "user"); + if (!Directory.Exists(_userConfigurationDirectoryPath)) + { + Directory.CreateDirectory(_userConfigurationDirectoryPath); + } + } + return _userConfigurationDirectoryPath; + } + } + + } +} diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 2058f6d611..a9e536c7bd 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -17,7 +17,7 @@ using MediaBrowser.Model.Progress; namespace MediaBrowser.Controller { - public class Kernel : BaseKernel + public class Kernel : BaseKernel { public static Kernel Instance { get; private set; } @@ -43,7 +43,7 @@ namespace MediaBrowser.Controller public IEnumerable EntityResolvers { get; private set; } /// - /// Creates a kernal based on a Data path, which is akin to our current programdata path + /// Creates a kernel based on a Data path, which is akin to our current programdata path /// public Kernel() : base() diff --git a/MediaBrowser.Controller/Library/ItemController.cs b/MediaBrowser.Controller/Library/ItemController.cs index 10648eca09..8d269679f5 100644 --- a/MediaBrowser.Controller/Library/ItemController.cs +++ b/MediaBrowser.Controller/Library/ItemController.cs @@ -305,7 +305,7 @@ namespace MediaBrowser.Controller.Library /// public Person GetPerson(string name) { - string path = Path.Combine(ApplicationPaths.PeoplePath, name); + string path = Path.Combine(Kernel.Instance.ApplicationPaths.PeoplePath, name); return GetImagesByNameItem(path, name); } @@ -315,7 +315,7 @@ namespace MediaBrowser.Controller.Library /// public Studio GetStudio(string name) { - string path = Path.Combine(ApplicationPaths.StudioPath, name); + string path = Path.Combine(Kernel.Instance.ApplicationPaths.StudioPath, name); return GetImagesByNameItem(path, name); } @@ -325,7 +325,7 @@ namespace MediaBrowser.Controller.Library /// public Genre GetGenre(string name) { - string path = Path.Combine(ApplicationPaths.GenrePath, name); + string path = Path.Combine(Kernel.Instance.ApplicationPaths.GenrePath, name); return GetImagesByNameItem(path, name); } @@ -335,7 +335,7 @@ namespace MediaBrowser.Controller.Library /// public Year GetYear(int value) { - string path = Path.Combine(ApplicationPaths.YearPath, value.ToString()); + string path = Path.Combine(Kernel.Instance.ApplicationPaths.YearPath, value.ToString()); return GetImagesByNameItem(path, value.ToString()); } diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 5c60529710..3000fd7a06 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -49,6 +49,7 @@ +