|
@@ -11,7 +11,6 @@ using System.IO;
|
|
|
using System.Linq;
|
|
|
using System.Net;
|
|
|
using System.Reflection;
|
|
|
-using System.Runtime.InteropServices;
|
|
|
using System.Security.Cryptography.X509Certificates;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
@@ -113,15 +112,11 @@ namespace Emby.Server.Implementations
|
|
|
/// </summary>
|
|
|
public abstract class ApplicationHost : IServerApplicationHost, IAsyncDisposable, IDisposable
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- /// The environment variable prefixes to log at server startup.
|
|
|
- /// </summary>
|
|
|
- private static readonly string[] _relevantEnvVarPrefixes = { "JELLYFIN_", "DOTNET_", "ASPNETCORE_" };
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// The disposable parts.
|
|
|
/// </summary>
|
|
|
private readonly ConcurrentDictionary<IDisposable, byte> _disposableParts = new();
|
|
|
+ private readonly DeviceId _deviceId;
|
|
|
|
|
|
private readonly IFileSystem _fileSystemManager;
|
|
|
private readonly IConfiguration _startupConfig;
|
|
@@ -130,7 +125,6 @@ namespace Emby.Server.Implementations
|
|
|
private readonly IPluginManager _pluginManager;
|
|
|
|
|
|
private List<Type> _creatingInstances;
|
|
|
- private IMediaEncoder _mediaEncoder;
|
|
|
private ISessionManager _sessionManager;
|
|
|
|
|
|
/// <summary>
|
|
@@ -139,8 +133,6 @@ namespace Emby.Server.Implementations
|
|
|
/// <value>All concrete types.</value>
|
|
|
private Type[] _allConcreteTypes;
|
|
|
|
|
|
- private DeviceId _deviceId;
|
|
|
-
|
|
|
private bool _disposed = false;
|
|
|
|
|
|
/// <summary>
|
|
@@ -164,6 +156,7 @@ namespace Emby.Server.Implementations
|
|
|
|
|
|
Logger = LoggerFactory.CreateLogger<ApplicationHost>();
|
|
|
_fileSystemManager.AddShortcutHandler(new MbLinkShortcutHandler(_fileSystemManager));
|
|
|
+ _deviceId = new DeviceId(ApplicationPaths, LoggerFactory);
|
|
|
|
|
|
ApplicationVersion = typeof(ApplicationHost).Assembly.GetName().Version;
|
|
|
ApplicationVersionString = ApplicationVersion.ToString(3);
|
|
@@ -191,23 +184,9 @@ namespace Emby.Server.Implementations
|
|
|
|
|
|
public bool CoreStartupHasCompleted { get; private set; }
|
|
|
|
|
|
- public virtual bool CanLaunchWebBrowser
|
|
|
- {
|
|
|
- get
|
|
|
- {
|
|
|
- if (!Environment.UserInteractive)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if (_startupOptions.IsService)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- return OperatingSystem.IsWindows() || OperatingSystem.IsMacOS();
|
|
|
- }
|
|
|
- }
|
|
|
+ public virtual bool CanLaunchWebBrowser => Environment.UserInteractive
|
|
|
+ && !_startupOptions.IsService
|
|
|
+ && (OperatingSystem.IsWindows() || OperatingSystem.IsMacOS());
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets the <see cref="INetworkManager"/> singleton instance.
|
|
@@ -284,15 +263,7 @@ namespace Emby.Server.Implementations
|
|
|
/// <value>The application name.</value>
|
|
|
public string ApplicationProductName { get; } = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductName;
|
|
|
|
|
|
- public string SystemId
|
|
|
- {
|
|
|
- get
|
|
|
- {
|
|
|
- _deviceId ??= new DeviceId(ApplicationPaths, LoggerFactory);
|
|
|
-
|
|
|
- return _deviceId.Value;
|
|
|
- }
|
|
|
- }
|
|
|
+ public string SystemId => _deviceId.Value;
|
|
|
|
|
|
/// <inheritdoc/>
|
|
|
public string Name => ApplicationProductName;
|
|
@@ -445,7 +416,7 @@ namespace Emby.Server.Implementations
|
|
|
ConfigurationManager.ConfigurationUpdated += OnConfigurationUpdated;
|
|
|
ConfigurationManager.NamedConfigurationUpdated += OnConfigurationUpdated;
|
|
|
|
|
|
- _mediaEncoder.SetFFmpegPath();
|
|
|
+ Resolve<IMediaEncoder>().SetFFmpegPath();
|
|
|
|
|
|
Logger.LogInformation("ServerId: {ServerId}", SystemId);
|
|
|
|
|
@@ -655,7 +626,6 @@ namespace Emby.Server.Implementations
|
|
|
var localizationManager = (LocalizationManager)Resolve<ILocalizationManager>();
|
|
|
await localizationManager.LoadAll().ConfigureAwait(false);
|
|
|
|
|
|
- _mediaEncoder = Resolve<IMediaEncoder>();
|
|
|
_sessionManager = Resolve<ISessionManager>();
|
|
|
|
|
|
SetStaticProperties();
|
|
@@ -666,36 +636,6 @@ namespace Emby.Server.Implementations
|
|
|
FindParts();
|
|
|
}
|
|
|
|
|
|
- public static void LogEnvironmentInfo(ILogger logger, IApplicationPaths appPaths)
|
|
|
- {
|
|
|
- // Distinct these to prevent users from reporting problems that aren't actually problems
|
|
|
- var commandLineArgs = Environment
|
|
|
- .GetCommandLineArgs()
|
|
|
- .Distinct();
|
|
|
-
|
|
|
- // Get all relevant environment variables
|
|
|
- var allEnvVars = Environment.GetEnvironmentVariables();
|
|
|
- var relevantEnvVars = new Dictionary<object, object>();
|
|
|
- foreach (var key in allEnvVars.Keys)
|
|
|
- {
|
|
|
- if (_relevantEnvVarPrefixes.Any(prefix => key.ToString().StartsWith(prefix, StringComparison.OrdinalIgnoreCase)))
|
|
|
- {
|
|
|
- relevantEnvVars.Add(key, allEnvVars[key]);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- logger.LogInformation("Environment Variables: {EnvVars}", relevantEnvVars);
|
|
|
- logger.LogInformation("Arguments: {Args}", commandLineArgs);
|
|
|
- logger.LogInformation("Operating system: {OS}", RuntimeInformation.OSDescription);
|
|
|
- logger.LogInformation("Architecture: {Architecture}", RuntimeInformation.OSArchitecture);
|
|
|
- logger.LogInformation("64-Bit Process: {Is64Bit}", Environment.Is64BitProcess);
|
|
|
- logger.LogInformation("User Interactive: {IsUserInteractive}", Environment.UserInteractive);
|
|
|
- logger.LogInformation("Processor count: {ProcessorCount}", Environment.ProcessorCount);
|
|
|
- logger.LogInformation("Program data path: {ProgramDataPath}", appPaths.ProgramDataPath);
|
|
|
- logger.LogInformation("Web resources path: {WebPath}", appPaths.WebPath);
|
|
|
- logger.LogInformation("Application directory: {ApplicationPath}", appPaths.ProgramSystemPath);
|
|
|
- }
|
|
|
-
|
|
|
private X509Certificate2 GetCertificate(string path, string password)
|
|
|
{
|
|
|
if (string.IsNullOrWhiteSpace(path))
|
|
@@ -782,10 +722,6 @@ namespace Emby.Server.Implementations
|
|
|
|
|
|
Resolve<ILiveTvManager>().AddParts(GetExports<ILiveTvService>(), GetExports<ITunerHost>(), GetExports<IListingsProvider>());
|
|
|
|
|
|
- Resolve<ISubtitleManager>().AddParts(GetExports<ISubtitleProvider>());
|
|
|
-
|
|
|
- Resolve<IChannelManager>().AddParts(GetExports<IChannel>());
|
|
|
-
|
|
|
Resolve<IMediaSourceManager>().AddParts(GetExports<IMediaSourceProvider>());
|
|
|
}
|
|
|
|