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 @@
+