mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Slight re-work of ApplicationPaths so that we can have inherited versions for the UI and Server
This commit is contained in:
parent
a508a997d9
commit
59a3dcc8c1
@ -208,7 +208,7 @@ namespace MediaBrowser.Api
|
|||||||
{
|
{
|
||||||
if (_FFMpegDirectory == null)
|
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))
|
if (!Directory.Exists(_FFMpegDirectory))
|
||||||
{
|
{
|
||||||
|
@ -174,7 +174,7 @@ namespace MediaBrowser.Api.HttpHandlers
|
|||||||
process.StartInfo = startInfo;
|
process.StartInfo = startInfo;
|
||||||
|
|
||||||
// FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory.
|
// 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
|
try
|
||||||
{
|
{
|
||||||
|
@ -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
MediaBrowser.Common/Configuration/BaseApplicationPaths.cs
Normal file
133
MediaBrowser.Common/Configuration/BaseApplicationPaths.cs
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,14 +18,17 @@ namespace MediaBrowser.Common.Kernel
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a shared base kernel for both the UI and server apps
|
/// Represents a shared base kernel for both the UI and server apps
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class BaseKernel<TConfigurationType> : IDisposable
|
public abstract class BaseKernel<TConfigurationType, TApplicationPathsType> : IDisposable
|
||||||
where TConfigurationType : BaseApplicationConfiguration, new()
|
where TConfigurationType : BaseApplicationConfiguration, new()
|
||||||
|
where TApplicationPathsType : BaseApplicationPaths, new()
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current configuration
|
/// Gets the current configuration
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TConfigurationType Configuration { get; private set; }
|
public TConfigurationType Configuration { get; private set; }
|
||||||
|
|
||||||
|
public TApplicationPathsType ApplicationPaths { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the list of currently loaded plugins
|
/// Gets the list of currently loaded plugins
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -45,7 +48,7 @@ namespace MediaBrowser.Common.Kernel
|
|||||||
|
|
||||||
public BaseKernel()
|
public BaseKernel()
|
||||||
{
|
{
|
||||||
|
ApplicationPaths = new TApplicationPathsType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void Init(IProgress<TaskProgress> progress)
|
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
|
//Configuration information for anything other than server-specific configuration will have to come via the API... -ebr
|
||||||
|
|
||||||
// Deserialize config
|
// Deserialize config
|
||||||
if (!File.Exists(ApplicationPaths.ConfigurationPath))
|
if (!File.Exists(ApplicationPaths.SystemConfigurationFilePath))
|
||||||
{
|
{
|
||||||
Configuration = new TConfigurationType();
|
Configuration = new TConfigurationType();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Configuration = JsonSerializer.DeserializeFromFile<TConfigurationType>(ApplicationPaths.ConfigurationPath);
|
Configuration = XmlSerializer.DeserializeFromFile<TConfigurationType>(ApplicationPaths.SystemConfigurationFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity;
|
Logger.LoggerInstance.LogSeverity = Configuration.LogSeverity;
|
||||||
|
@ -61,8 +61,8 @@
|
|||||||
<Reference Include="WindowsBase" />
|
<Reference Include="WindowsBase" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Configuration\ApplicationPaths.cs" />
|
|
||||||
<Compile Include="Configuration\BaseApplicationConfiguration.cs" />
|
<Compile Include="Configuration\BaseApplicationConfiguration.cs" />
|
||||||
|
<Compile Include="Configuration\BaseApplicationPaths.cs" />
|
||||||
<Compile Include="Drawing\DrawingUtils.cs" />
|
<Compile Include="Drawing\DrawingUtils.cs" />
|
||||||
<Compile Include="Events\GenericItemEventArgs.cs" />
|
<Compile Include="Events\GenericItemEventArgs.cs" />
|
||||||
<Compile Include="Net\Handlers\StaticFileHandler.cs" />
|
<Compile Include="Net\Handlers\StaticFileHandler.cs" />
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.IO;
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Serialization
|
namespace MediaBrowser.Common.Serialization
|
||||||
{
|
{
|
||||||
@ -10,22 +9,14 @@ namespace MediaBrowser.Common.Serialization
|
|||||||
{
|
{
|
||||||
public static void SerializeToStream<T>(T obj, Stream stream)
|
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)
|
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);
|
GetSerializer<T>().Serialize(stream, obj);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static object DeserializeFromFile(Type type, string file)
|
|
||||||
{
|
|
||||||
using (Stream stream = File.OpenRead(file))
|
|
||||||
{
|
|
||||||
return ServiceStack.Text.XmlSerializer.DeserializeFromStream(type, stream);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,18 +24,18 @@ namespace MediaBrowser.Common.Serialization
|
|||||||
{
|
{
|
||||||
using (Stream stream = File.OpenRead(file))
|
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)
|
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
MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs
Normal file
154
MediaBrowser.Controller/Configuration/ServerApplicationPaths.cs
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@ using MediaBrowser.Model.Progress;
|
|||||||
|
|
||||||
namespace MediaBrowser.Controller
|
namespace MediaBrowser.Controller
|
||||||
{
|
{
|
||||||
public class Kernel : BaseKernel<ServerConfiguration>
|
public class Kernel : BaseKernel<ServerConfiguration, ServerApplicationPaths>
|
||||||
{
|
{
|
||||||
public static Kernel Instance { get; private set; }
|
public static Kernel Instance { get; private set; }
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ namespace MediaBrowser.Controller
|
|||||||
public IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
|
public IEnumerable<IBaseItemResolver> EntityResolvers { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <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>
|
/// </summary>
|
||||||
public Kernel()
|
public Kernel()
|
||||||
: base()
|
: base()
|
||||||
|
@ -305,7 +305,7 @@ namespace MediaBrowser.Controller.Library
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Person GetPerson(string name)
|
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);
|
return GetImagesByNameItem<Person>(path, name);
|
||||||
}
|
}
|
||||||
@ -315,7 +315,7 @@ namespace MediaBrowser.Controller.Library
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Studio GetStudio(string name)
|
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);
|
return GetImagesByNameItem<Studio>(path, name);
|
||||||
}
|
}
|
||||||
@ -325,7 +325,7 @@ namespace MediaBrowser.Controller.Library
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Genre GetGenre(string name)
|
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);
|
return GetImagesByNameItem<Genre>(path, name);
|
||||||
}
|
}
|
||||||
@ -335,7 +335,7 @@ namespace MediaBrowser.Controller.Library
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Year GetYear(int value)
|
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());
|
return GetImagesByNameItem<Year>(path, value.ToString());
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Configuration\ServerApplicationPaths.cs" />
|
||||||
<Compile Include="Configuration\ServerConfiguration.cs" />
|
<Compile Include="Configuration\ServerConfiguration.cs" />
|
||||||
<Compile Include="Events\ItemResolveEventArgs.cs" />
|
<Compile Include="Events\ItemResolveEventArgs.cs" />
|
||||||
<Compile Include="IO\DirectoryWatchers.cs" />
|
<Compile Include="IO\DirectoryWatchers.cs" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user