2017-02-20 13:50:58 -07:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using Emby.Server.Implementations.AppBase;
|
2013-02-24 14:53:54 -07:00
|
|
|
|
using MediaBrowser.Controller;
|
2013-02-20 18:33:05 -07:00
|
|
|
|
|
2017-02-20 13:50:58 -07:00
|
|
|
|
namespace Emby.Server.Implementations
|
2013-02-20 18:33:05 -07:00
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Extends BaseApplicationPaths to add paths that are only applicable on the server
|
|
|
|
|
/// </summary>
|
2013-02-24 14:53:54 -07:00
|
|
|
|
public class ServerApplicationPaths : BaseApplicationPaths, IServerApplicationPaths
|
2013-02-20 18:33:05 -07:00
|
|
|
|
{
|
2013-09-20 18:04:14 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Initializes a new instance of the <see cref="BaseApplicationPaths" /> class.
|
|
|
|
|
/// </summary>
|
2017-08-17 13:19:02 -07:00
|
|
|
|
public ServerApplicationPaths(string programDataPath, string appFolderPath, string applicationResourcesPath)
|
|
|
|
|
: base(programDataPath, appFolderPath)
|
2013-09-20 18:04:14 -07:00
|
|
|
|
{
|
2014-11-26 13:57:16 -07:00
|
|
|
|
ApplicationResourcesPath = applicationResourcesPath;
|
2013-09-20 18:04:14 -07:00
|
|
|
|
}
|
|
|
|
|
|
2014-11-26 13:57:16 -07:00
|
|
|
|
public string ApplicationResourcesPath { get; private set; }
|
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the base root media directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The root folder path.</value>
|
|
|
|
|
public string RootFolderPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2013-06-04 09:48:23 -07:00
|
|
|
|
return Path.Combine(ProgramDataPath, "root");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the default user view directory. Used if no specific user view is defined.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The default user views path.</value>
|
|
|
|
|
public string DefaultUserViewsPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2013-06-04 09:48:23 -07:00
|
|
|
|
return Path.Combine(RootFolderPath, "default");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to localization data.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The localization path.</value>
|
|
|
|
|
public string LocalizationPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2013-06-04 09:48:23 -07:00
|
|
|
|
return Path.Combine(ProgramDataPath, "localization");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the People directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The people path.</value>
|
|
|
|
|
public string PeoplePath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "People");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-17 22:56:10 -07:00
|
|
|
|
public string ArtistsPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "artists");
|
2016-08-17 22:56:10 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the Genre directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The genre path.</value>
|
|
|
|
|
public string GenrePath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "Genre");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-06-10 20:31:00 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the Genre directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The genre path.</value>
|
|
|
|
|
public string MusicGenrePath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "MusicGenre");
|
2013-06-10 20:31:00 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
2013-09-20 18:04:14 -07:00
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the Studio directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The studio path.</value>
|
|
|
|
|
public string StudioPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "Studio");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the Year directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The year path.</value>
|
|
|
|
|
public string YearPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "Year");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the General IBN directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The general path.</value>
|
|
|
|
|
public string GeneralPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "general");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the Ratings IBN directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The ratings path.</value>
|
|
|
|
|
public string RatingsPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "ratings");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-05-02 07:30:38 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the media info images path.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The media info images path.</value>
|
|
|
|
|
public string MediaInfoImagesPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "mediainfo");
|
2013-05-02 07:30:38 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the path to the user configuration directory
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The user configuration directory path.</value>
|
|
|
|
|
public string UserConfigurationDirectoryPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2013-06-04 09:48:23 -07:00
|
|
|
|
return Path.Combine(ConfigurationDirectoryPath, "users");
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-12 10:26:21 -07:00
|
|
|
|
private string _defaultTranscodingTempPath;
|
|
|
|
|
public string DefaultTranscodingTempPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _defaultTranscodingTempPath ?? (_defaultTranscodingTempPath = Path.Combine(ProgramDataPath, "transcoding-temp"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-11 11:58:50 -07:00
|
|
|
|
private string _transcodingTempPath;
|
|
|
|
|
public string TranscodingTempPath
|
2013-02-20 18:33:05 -07:00
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return _transcodingTempPath ?? (_transcodingTempPath = DefaultTranscodingTempPath);
|
2014-01-11 11:58:50 -07:00
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_transcodingTempPath = value;
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-29 21:51:43 -07:00
|
|
|
|
public string GetTranscodingTempPath()
|
|
|
|
|
{
|
|
|
|
|
var path = TranscodingTempPath;
|
|
|
|
|
|
2018-09-12 10:26:21 -07:00
|
|
|
|
if (!string.Equals(path, DefaultTranscodingTempPath, StringComparison.OrdinalIgnoreCase))
|
2017-10-29 21:51:43 -07:00
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(path);
|
|
|
|
|
|
|
|
|
|
var testPath = Path.Combine(path, Guid.NewGuid().ToString());
|
|
|
|
|
Directory.CreateDirectory(testPath);
|
|
|
|
|
Directory.Delete(testPath);
|
|
|
|
|
|
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
}
|
2017-10-29 21:51:43 -07:00
|
|
|
|
}
|
2018-09-12 10:26:21 -07:00
|
|
|
|
|
|
|
|
|
path = DefaultTranscodingTempPath;
|
|
|
|
|
Directory.CreateDirectory(path);
|
|
|
|
|
return path;
|
2017-10-29 21:51:43 -07:00
|
|
|
|
}
|
|
|
|
|
|
2013-07-01 10:17:33 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the game genre path.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <value>The game genre path.</value>
|
|
|
|
|
public string GameGenrePath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-09-12 10:26:21 -07:00
|
|
|
|
return Path.Combine(InternalMetadataPath, "GameGenre");
|
2013-07-01 10:17:33 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
2014-02-08 13:02:35 -07:00
|
|
|
|
|
2014-03-25 14:13:55 -07:00
|
|
|
|
private string _internalMetadataPath;
|
2014-02-08 13:02:35 -07:00
|
|
|
|
public string InternalMetadataPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2014-03-25 14:13:55 -07:00
|
|
|
|
return _internalMetadataPath ?? (_internalMetadataPath = Path.Combine(DataPath, "metadata"));
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_internalMetadataPath = value;
|
2014-02-08 13:02:35 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
2018-09-12 10:26:21 -07:00
|
|
|
|
|
|
|
|
|
private const string _virtualInternalMetadataPath = "%MetadataPath%";
|
|
|
|
|
public string VirtualInternalMetadataPath
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _virtualInternalMetadataPath;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-02-20 18:33:05 -07:00
|
|
|
|
}
|
|
|
|
|
}
|