浏览代码

Slight re-work of ApplicationPaths so that we can have inherited versions for the UI and Server

LukePulverenti Luke Pulverenti luke pulverenti 13 年之前
父节点
当前提交
59a3dcc8c1

+ 1 - 1
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))
                     {

+ 1 - 1
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
             {

+ 0 - 299
MediaBrowser.Common/Configuration/ApplicationPaths.cs

@@ -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;
-        /// <summary>
-        /// Gets the path to the program data folder
-        /// </summary>
-        public static string ProgramDataPath
-        {
-            get
-            {
-                if (_programDataPath == null)
-                {
-                    _programDataPath = GetProgramDataPath();
-                }
-                return _programDataPath;
-            }
-        }
-
-
-        private static string _pluginsPath;
-        /// <summary>
-        /// Gets the path to the plugin directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the application configuration root directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the system configuration directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the user configuration directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the device configuration directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the log directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the root media directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the Images By Name directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the People directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the Genre directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the Studio directory
-        /// </summary>
-        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;
-        /// <summary>
-        /// Gets the path to the Year directory
-        /// </summary>
-        public static string YearPath
-        {
-            get
-            {
-                if (_yearPath == null)
-                {
-                    _yearPath = Path.Combine(ImagesByNamePath, "Year");
-                    if (!Directory.Exists(_yearPath))
-                    {
-                        Directory.CreateDirectory(_yearPath);
-                    }
-                }
-
-                return _yearPath;
-            }
-        }
-        
-        /// <summary>
-        /// Gets the path to the application's ProgramDataFolder
-        /// </summary>
-        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;
-        }
-
-    }
-}

+ 133 - 0
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;
+        /// <summary>
+        /// Gets the path to the program data folder
+        /// </summary>
+        public string ProgramDataPath
+        {
+            get
+            {
+                if (_programDataPath == null)
+                {
+                    _programDataPath = GetProgramDataPath();
+                }
+                return _programDataPath;
+            }
+        }
+
+        private string _pluginsPath;
+        /// <summary>
+        /// Gets the path to the plugin directory
+        /// </summary>
+        public string PluginsPath
+        {
+            get
+            {
+                if (_pluginsPath == null)
+                {
+                    _pluginsPath = Path.Combine(ProgramDataPath, "plugins");
+                    if (!Directory.Exists(_pluginsPath))
+                    {
+                        Directory.CreateDirectory(_pluginsPath);
+                    }
+                }
+
+                return _pluginsPath;
+            }
+        }
+
+        private string _logDirectoryPath;
+        /// <summary>
+        /// Gets the path to the log directory
+        /// </summary>
+        public string LogDirectoryPath
+        {
+            get
+            {
+                if (_logDirectoryPath == null)
+                {
+                    _logDirectoryPath = Path.Combine(ProgramDataPath, "logs");
+                    if (!Directory.Exists(_logDirectoryPath))
+                    {
+                        Directory.CreateDirectory(_logDirectoryPath);
+                    }
+                }
+                return _logDirectoryPath;
+            }
+        }
+
+        private string _configurationDirectoryPath;
+        /// <summary>
+        /// Gets the path to the application configuration root directory
+        /// </summary>
+        public string ConfigurationDirectoryPath
+        {
+            get
+            {
+                if (_configurationDirectoryPath == null)
+                {
+                    _configurationDirectoryPath = Path.Combine(ProgramDataPath, "config");
+                    if (!Directory.Exists(_configurationDirectoryPath))
+                    {
+                        Directory.CreateDirectory(_configurationDirectoryPath);
+                    }
+                }
+                return _configurationDirectoryPath;
+            }
+        }
+
+        private string _systemConfigurationFilePath;
+        /// <summary>
+        /// Gets the path to the system configuration file
+        /// </summary>
+        public string SystemConfigurationFilePath
+        {
+            get
+            {
+                if (_systemConfigurationFilePath == null)
+                {
+                    _systemConfigurationFilePath = Path.Combine(ConfigurationDirectoryPath, "system.xml");
+                }
+                return _systemConfigurationFilePath;
+            }
+        }
+
+        /// <summary>
+        /// Gets the path to the application's ProgramDataFolder
+        /// </summary>
+        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;
+        }
+    }
+}

+ 7 - 4
MediaBrowser.Common/Kernel/BaseKernel.cs

@@ -18,14 +18,17 @@ namespace MediaBrowser.Common.Kernel
     /// <summary>
     /// Represents a shared base kernel for both the UI and server apps
     /// </summary>
-    public abstract class BaseKernel<TConfigurationType> : IDisposable
+    public abstract class BaseKernel<TConfigurationType, TApplicationPathsType> : IDisposable
         where TConfigurationType : BaseApplicationConfiguration, new()
+        where TApplicationPathsType : BaseApplicationPaths, new()
     {
         /// <summary>
         /// Gets the current configuration
         /// </summary>
         public TConfigurationType Configuration { get; private set; }
 
+        public TApplicationPathsType ApplicationPaths { get; private set; }
+
         /// <summary>
         /// Gets the list of currently loaded plugins
         /// </summary>
@@ -45,7 +48,7 @@ namespace MediaBrowser.Common.Kernel
 
         public BaseKernel()
         {
-
+            ApplicationPaths = new TApplicationPathsType();
         }
 
         public virtual void Init(IProgress<TaskProgress> 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<TConfigurationType>(ApplicationPaths.ConfigurationPath);
+                Configuration = XmlSerializer.DeserializeFromFile<TConfigurationType>(ApplicationPaths.SystemConfigurationFilePath);
             }
 
             Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity;

+ 1 - 1
MediaBrowser.Common/MediaBrowser.Common.csproj

@@ -61,8 +61,8 @@
     <Reference Include="WindowsBase" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Configuration\ApplicationPaths.cs" />
     <Compile Include="Configuration\BaseApplicationConfiguration.cs" />
+    <Compile Include="Configuration\BaseApplicationPaths.cs" />
     <Compile Include="Drawing\DrawingUtils.cs" />
     <Compile Include="Events\GenericItemEventArgs.cs" />
     <Compile Include="Net\Handlers\StaticFileHandler.cs" />

+ 8 - 17
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>(T obj, Stream stream)
         {
-            ServiceStack.Text.XmlSerializer.SerializeToStream(obj, stream);
+            GetSerializer<T>().Serialize(stream, obj);
         }
 
         public static void SerializeToFile<T>(T obj, string file)
         {
-            using (StreamWriter streamWriter = new StreamWriter(file))
+            using (FileStream stream = new FileStream(file, FileMode.Create))
             {
-                ServiceStack.Text.XmlSerializer.SerializeToWriter<T>(obj, streamWriter);
-            }
-        }
-
-        public static object DeserializeFromFile(Type type, string file)
-        {
-            using (Stream stream = File.OpenRead(file))
-            {
-                return ServiceStack.Text.XmlSerializer.DeserializeFromStream(type, stream);
+                GetSerializer<T>().Serialize(stream, obj);
             }
         }
 
@@ -33,18 +24,18 @@ namespace MediaBrowser.Common.Serialization
         {
             using (Stream stream = File.OpenRead(file))
             {
-                return ServiceStack.Text.XmlSerializer.DeserializeFromStream<T>(stream);
+                return (T)GetSerializer<T>().Deserialize(stream);
             }
         }
 
         public static T DeserializeFromStream<T>(Stream stream)
         {
-            return ServiceStack.Text.XmlSerializer.DeserializeFromStream<T>(stream);
+            return (T)GetSerializer<T>().Deserialize(stream);
         }
 
-        public static T DeserializeFromString<T>(string data)
+        private static System.Xml.Serialization.XmlSerializer GetSerializer<T>()
         {
-            return ServiceStack.Text.XmlSerializer.DeserializeFromString<T>(data);
+            return new System.Xml.Serialization.XmlSerializer(typeof(T));
         }
     }
 }

+ 154 - 0
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;
+        /// <summary>
+        /// Gets the path to the root media directory
+        /// </summary>
+        public string RootFolderPath
+        {
+            get
+            {
+                if (_rootFolderPath == null)
+                {
+                    _rootFolderPath = Path.Combine(ProgramDataPath, "root");
+                    if (!Directory.Exists(_rootFolderPath))
+                    {
+                        Directory.CreateDirectory(_rootFolderPath);
+                    }
+                }
+                return _rootFolderPath;
+            }
+        }
+
+        private string _ibnPath;
+        /// <summary>
+        /// Gets the path to the Images By Name directory
+        /// </summary>
+        public string ImagesByNamePath
+        {
+            get
+            {
+                if (_ibnPath == null)
+                {
+                    _ibnPath = Path.Combine(ProgramDataPath, "ImagesByName");
+                    if (!Directory.Exists(_ibnPath))
+                    {
+                        Directory.CreateDirectory(_ibnPath);
+                    }
+                }
+
+                return _ibnPath;
+            }
+        }
+
+        private string _PeoplePath;
+        /// <summary>
+        /// Gets the path to the People directory
+        /// </summary>
+        public string PeoplePath
+        {
+            get
+            {
+                if (_PeoplePath == null)
+                {
+                    _PeoplePath = Path.Combine(ImagesByNamePath, "People");
+                    if (!Directory.Exists(_PeoplePath))
+                    {
+                        Directory.CreateDirectory(_PeoplePath);
+                    }
+                }
+
+                return _PeoplePath;
+            }
+        }
+
+        private string _GenrePath;
+        /// <summary>
+        /// Gets the path to the Genre directory
+        /// </summary>
+        public string GenrePath
+        {
+            get
+            {
+                if (_GenrePath == null)
+                {
+                    _GenrePath = Path.Combine(ImagesByNamePath, "Genre");
+                    if (!Directory.Exists(_GenrePath))
+                    {
+                        Directory.CreateDirectory(_GenrePath);
+                    }
+                }
+
+                return _GenrePath;
+            }
+        }
+
+        private string _StudioPath;
+        /// <summary>
+        /// Gets the path to the Studio directory
+        /// </summary>
+        public string StudioPath
+        {
+            get
+            {
+                if (_StudioPath == null)
+                {
+                    _StudioPath = Path.Combine(ImagesByNamePath, "Studio");
+                    if (!Directory.Exists(_StudioPath))
+                    {
+                        Directory.CreateDirectory(_StudioPath);
+                    }
+                }
+
+                return _StudioPath;
+            }
+        }
+
+        private string _yearPath;
+        /// <summary>
+        /// Gets the path to the Year directory
+        /// </summary>
+        public string YearPath
+        {
+            get
+            {
+                if (_yearPath == null)
+                {
+                    _yearPath = Path.Combine(ImagesByNamePath, "Year");
+                    if (!Directory.Exists(_yearPath))
+                    {
+                        Directory.CreateDirectory(_yearPath);
+                    }
+                }
+
+                return _yearPath;
+            }
+        }
+
+        private string _userConfigurationDirectoryPath;
+        /// <summary>
+        /// Gets the path to the user configuration directory
+        /// </summary>
+        public string UserConfigurationDirectoryPath
+        {
+            get
+            {
+                if (_userConfigurationDirectoryPath == null)
+                {
+                    _userConfigurationDirectoryPath = Path.Combine(ConfigurationDirectoryPath, "user");
+                    if (!Directory.Exists(_userConfigurationDirectoryPath))
+                    {
+                        Directory.CreateDirectory(_userConfigurationDirectoryPath);
+                    }
+                }
+                return _userConfigurationDirectoryPath;
+            }
+        }
+
+    }
+}

+ 2 - 2
MediaBrowser.Controller/Kernel.cs

@@ -17,7 +17,7 @@ using MediaBrowser.Model.Progress;
 
 namespace MediaBrowser.Controller
 {
-    public class Kernel : BaseKernel<ServerConfiguration>
+    public class Kernel : BaseKernel<ServerConfiguration, ServerApplicationPaths>
     {
         public static Kernel Instance { get; private set; }
 
@@ -43,7 +43,7 @@ namespace MediaBrowser.Controller
         public IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
 
         /// <summary>
-        /// 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
         /// </summary>
         public Kernel()
             : base()

+ 4 - 4
MediaBrowser.Controller/Library/ItemController.cs

@@ -305,7 +305,7 @@ namespace MediaBrowser.Controller.Library
         /// </summary>
         public Person GetPerson(string name)
         {
-            string path = Path.Combine(ApplicationPaths.PeoplePath, name);
+            string path = Path.Combine(Kernel.Instance.ApplicationPaths.PeoplePath, name);
 
             return GetImagesByNameItem<Person>(path, name);
         }
@@ -315,7 +315,7 @@ namespace MediaBrowser.Controller.Library
         /// </summary>
         public Studio GetStudio(string name)
         {
-            string path = Path.Combine(ApplicationPaths.StudioPath, name);
+            string path = Path.Combine(Kernel.Instance.ApplicationPaths.StudioPath, name);
 
             return GetImagesByNameItem<Studio>(path, name);
         }
@@ -325,7 +325,7 @@ namespace MediaBrowser.Controller.Library
         /// </summary>
         public Genre GetGenre(string name)
         {
-            string path = Path.Combine(ApplicationPaths.GenrePath, name);
+            string path = Path.Combine(Kernel.Instance.ApplicationPaths.GenrePath, name);
 
             return GetImagesByNameItem<Genre>(path, name);
         }
@@ -335,7 +335,7 @@ namespace MediaBrowser.Controller.Library
         /// </summary>
         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<Year>(path, value.ToString());
         }

+ 1 - 0
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -49,6 +49,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Configuration\ServerApplicationPaths.cs" />
     <Compile Include="Configuration\ServerConfiguration.cs" />
     <Compile Include="Events\ItemResolveEventArgs.cs" />
     <Compile Include="IO\DirectoryWatchers.cs" />