aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Core/ApplicationHost.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Core/ApplicationHost.cs')
-rw-r--r--Emby.Server.Core/ApplicationHost.cs114
1 files changed, 44 insertions, 70 deletions
diff --git a/Emby.Server.Core/ApplicationHost.cs b/Emby.Server.Core/ApplicationHost.cs
index 5c8aea7ed..7f795a68d 100644
--- a/Emby.Server.Core/ApplicationHost.cs
+++ b/Emby.Server.Core/ApplicationHost.cs
@@ -142,7 +142,7 @@ namespace Emby.Server.Core
/// <summary>
/// Class CompositionRoot
/// </summary>
- public class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost, IDependencyContainer
+ public abstract class ApplicationHost : BaseApplicationHost<ServerApplicationPaths>, IServerApplicationHost, IDependencyContainer
{
/// <summary>
/// Gets the server configuration manager.
@@ -257,11 +257,9 @@ namespace Emby.Server.Core
protected IAuthService AuthService { get; private set; }
- private readonly StartupOptions _startupOptions;
+ protected readonly StartupOptions StartupOptions;
private readonly string _releaseAssetFilename;
- internal INativeApp NativeApp { get; set; }
-
internal IPowerManagement PowerManagement { get; private set; }
internal IImageEncoder ImageEncoder { get; private set; }
@@ -275,7 +273,6 @@ namespace Emby.Server.Core
ILogManager logManager,
StartupOptions options,
IFileSystem fileSystem,
- INativeApp nativeApp,
IPowerManagement powerManagement,
string releaseAssetFilename,
IEnvironmentInfo environmentInfo,
@@ -293,11 +290,10 @@ namespace Emby.Server.Core
memoryStreamFactory,
networkManager)
{
- _startupOptions = options;
+ StartupOptions = options;
_certificateGenerator = certificateGenerator;
_releaseAssetFilename = releaseAssetFilename;
_defaultUserNameFactory = defaultUsernameFactory;
- NativeApp = nativeApp;
PowerManagement = powerManagement;
ImageEncoder = imageEncoder;
@@ -314,19 +310,11 @@ namespace Emby.Server.Core
{
get
{
- return _version ?? (_version = GetAssembly(NativeApp.GetType()).GetName().Version);
+ return _version ?? (_version = GetAssembly(GetType()).GetName().Version);
}
}
- public override bool IsRunningAsService
- {
- get { return NativeApp.IsRunningAsService; }
- }
-
- public bool SupportsRunningAsService
- {
- get { return NativeApp.SupportsRunningAsService; }
- }
+ public abstract bool SupportsRunningAsService { get; }
/// <summary>
/// Gets the name.
@@ -345,19 +333,7 @@ namespace Emby.Server.Core
return type.GetTypeInfo().Assembly;
}
- /// <summary>
- /// Gets a value indicating whether this instance can self restart.
- /// </summary>
- /// <value><c>true</c> if this instance can self restart; otherwise, <c>false</c>.</value>
- public override bool CanSelfRestart
- {
- get { return NativeApp.CanSelfRestart; }
- }
-
- public bool SupportsAutoRunAtStartup
- {
- get { return NativeApp.SupportsAutoRunAtStartup; }
- }
+ public abstract bool SupportsAutoRunAtStartup { get; }
private void SetBaseExceptionMessage()
{
@@ -580,11 +556,11 @@ namespace Emby.Server.Core
UserRepository = await GetUserRepository().ConfigureAwait(false);
- var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager, JsonSerializer, ApplicationPaths, NativeApp.GetDbConnector(), MemoryStreamFactory);
+ var displayPreferencesRepo = new SqliteDisplayPreferencesRepository(LogManager, JsonSerializer, ApplicationPaths, GetDbConnector(), MemoryStreamFactory);
DisplayPreferencesRepository = displayPreferencesRepo;
RegisterSingleInstance(DisplayPreferencesRepository);
- var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager, NativeApp.GetDbConnector(), MemoryStreamFactory);
+ var itemRepo = new SqliteItemRepository(ServerConfigurationManager, JsonSerializer, LogManager, GetDbConnector(), MemoryStreamFactory);
ItemRepository = itemRepo;
RegisterSingleInstance(ItemRepository);
@@ -707,7 +683,7 @@ namespace Emby.Server.Core
EncodingManager = new EncodingManager(FileSystemManager, Logger, MediaEncoder, ChapterManager, LibraryManager);
RegisterSingleInstance(EncodingManager);
- var sharingRepo = new SharingRepository(LogManager, ApplicationPaths, NativeApp.GetDbConnector());
+ var sharingRepo = new SharingRepository(LogManager, ApplicationPaths, GetDbConnector());
await sharingRepo.Initialize().ConfigureAwait(false);
RegisterSingleInstance<ISharingManager>(new SharingManager(sharingRepo, ServerConfigurationManager, LibraryManager, this));
@@ -727,7 +703,7 @@ namespace Emby.Server.Core
await displayPreferencesRepo.Initialize().ConfigureAwait(false);
- var userDataRepo = new SqliteUserDataRepository(LogManager, ApplicationPaths, NativeApp.GetDbConnector());
+ var userDataRepo = new SqliteUserDataRepository(LogManager, ApplicationPaths, GetDbConnector());
((UserDataManager)UserDataManager).Repository = userDataRepo;
await itemRepo.Initialize(userDataRepo).ConfigureAwait(false);
@@ -770,14 +746,16 @@ namespace Emby.Server.Core
{
var maxConcurrentImageProcesses = Math.Max(Environment.ProcessorCount, 4);
- if (_startupOptions.ContainsOption("-imagethreads"))
+ if (StartupOptions.ContainsOption("-imagethreads"))
{
- int.TryParse(_startupOptions.GetOption("-imagethreads"), NumberStyles.Any, CultureInfo.InvariantCulture, out maxConcurrentImageProcesses);
+ int.TryParse(StartupOptions.GetOption("-imagethreads"), NumberStyles.Any, CultureInfo.InvariantCulture, out maxConcurrentImageProcesses);
}
return new ImageProcessor(LogManager.GetLogger("ImageProcessor"), ServerConfigurationManager.ApplicationPaths, FileSystemManager, JsonSerializer, ImageEncoder, maxConcurrentImageProcesses, () => LibraryManager, TimerFactory);
}
+ protected abstract FFMpegInstallInfo GetFfmpegInstallInfo();
+
/// <summary>
/// Registers the media encoder.
/// </summary>
@@ -787,8 +765,8 @@ namespace Emby.Server.Core
string encoderPath = null;
string probePath = null;
- var info = await new FFMpegLoader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager, NativeApp.GetFfmpegInstallInfo())
- .GetFFMpegInfo(_startupOptions, progress).ConfigureAwait(false);
+ var info = await new FFMpegLoader(Logger, ApplicationPaths, HttpClient, ZipClient, FileSystemManager, GetFfmpegInstallInfo())
+ .GetFFMpegInfo(StartupOptions, progress).ConfigureAwait(false);
encoderPath = info.EncoderPath;
probePath = info.ProbePath;
@@ -825,7 +803,7 @@ namespace Emby.Server.Core
/// <returns>Task{IUserRepository}.</returns>
private async Task<IUserRepository> GetUserRepository()
{
- var repo = new SqliteUserRepository(LogManager, ApplicationPaths, JsonSerializer, NativeApp.GetDbConnector(), MemoryStreamFactory);
+ var repo = new SqliteUserRepository(LogManager, ApplicationPaths, JsonSerializer, GetDbConnector(), MemoryStreamFactory);
await repo.Initialize().ConfigureAwait(false);
@@ -838,7 +816,7 @@ namespace Emby.Server.Core
/// <returns>Task{IUserRepository}.</returns>
private async Task<IFileOrganizationRepository> GetFileOrganizationRepository()
{
- var repo = new SqliteFileOrganizationRepository(LogManager, ServerConfigurationManager.ApplicationPaths, NativeApp.GetDbConnector());
+ var repo = new SqliteFileOrganizationRepository(LogManager, ServerConfigurationManager.ApplicationPaths, GetDbConnector());
await repo.Initialize().ConfigureAwait(false);
@@ -847,7 +825,7 @@ namespace Emby.Server.Core
private async Task<IAuthenticationRepository> GetAuthenticationRepository()
{
- var repo = new AuthenticationRepository(LogManager, ServerConfigurationManager.ApplicationPaths, NativeApp.GetDbConnector());
+ var repo = new AuthenticationRepository(LogManager, ServerConfigurationManager.ApplicationPaths, GetDbConnector());
await repo.Initialize().ConfigureAwait(false);
@@ -856,7 +834,7 @@ namespace Emby.Server.Core
private async Task<IActivityRepository> GetActivityLogRepository()
{
- var repo = new ActivityRepository(LogManager, ServerConfigurationManager.ApplicationPaths, NativeApp.GetDbConnector());
+ var repo = new ActivityRepository(LogManager, ServerConfigurationManager.ApplicationPaths, GetDbConnector());
await repo.Initialize().ConfigureAwait(false);
@@ -865,7 +843,7 @@ namespace Emby.Server.Core
private async Task<ISyncRepository> GetSyncRepository()
{
- var repo = new SyncRepository(LogManager, JsonSerializer, ServerConfigurationManager.ApplicationPaths, NativeApp.GetDbConnector());
+ var repo = new SyncRepository(LogManager, JsonSerializer, ServerConfigurationManager.ApplicationPaths, GetDbConnector());
await repo.Initialize().ConfigureAwait(false);
@@ -877,7 +855,7 @@ namespace Emby.Server.Core
/// </summary>
private async Task ConfigureNotificationsRepository()
{
- var repo = new SqliteNotificationsRepository(LogManager, ApplicationPaths, NativeApp.GetDbConnector());
+ var repo = new SqliteNotificationsRepository(LogManager, ApplicationPaths, GetDbConnector());
await repo.Initialize().ConfigureAwait(false);
@@ -1123,24 +1101,12 @@ namespace Emby.Server.Core
Logger.ErrorException("Error sending server restart notification", ex);
}
- Logger.Info("Calling NativeApp.Restart");
+ Logger.Info("Calling RestartInternal");
- NativeApp.Restart(_startupOptions);
+ RestartInternal();
}
- /// <summary>
- /// Gets or sets a value indicating whether this instance can self update.
- /// </summary>
- /// <value><c>true</c> if this instance can self update; otherwise, <c>false</c>.</value>
- public override bool CanSelfUpdate
- {
- get
- {
-#pragma warning disable 162
- return NativeApp.CanSelfUpdate;
-#pragma warning restore 162
- }
- }
+ protected abstract void RestartInternal();
/// <summary>
/// Gets the composable part assemblies.
@@ -1196,14 +1162,16 @@ namespace Emby.Server.Core
// Xbmc
list.Add(GetAssembly(typeof(ArtistNfoProvider)));
- list.AddRange(NativeApp.GetAssembliesWithParts());
+ list.AddRange(GetAssembliesWithPartsInternal());
// Include composable parts in the running assembly
- list.Add(GetAssembly(GetType()));
+ list.Add(GetAssembly(typeof(ApplicationHost)));
return list;
}
+ protected abstract List<Assembly> GetAssembliesWithPartsInternal();
+
/// <summary>
/// Gets the plugin assemblies.
/// </summary>
@@ -1280,7 +1248,7 @@ namespace Emby.Server.Core
EncoderLocationType = MediaEncoder.EncoderLocationType,
SystemArchitecture = EnvironmentInfo.SystemArchitecture,
SystemUpdateLevel = ConfigurationManager.CommonConfiguration.SystemUpdateLevel,
- PackageName = _startupOptions.GetOption("-package")
+ PackageName = StartupOptions.GetOption("-package")
};
}
@@ -1456,9 +1424,11 @@ namespace Emby.Server.Core
Logger.ErrorException("Error sending server shutdown notification", ex);
}
- NativeApp.Shutdown();
+ ShutdownInternal();
}
+ protected abstract void ShutdownInternal();
+
/// <summary>
/// Registers the server with administrator access.
/// </summary>
@@ -1468,7 +1438,7 @@ namespace Emby.Server.Core
try
{
- NativeApp.AuthorizeServer(
+ AuthorizeServer(
UdpServerEntryPoint.PortNumber,
ServerConfigurationManager.Configuration.HttpServerPortNumber,
ServerConfigurationManager.Configuration.HttpsPortNumber,
@@ -1481,6 +1451,9 @@ namespace Emby.Server.Core
}
}
+ protected abstract void AuthorizeServer(int udpPort, int httpServerPort, int httpsServerPort, string applicationPath, string tempDirectory);
+ protected abstract IDbConnector GetDbConnector();
+
public event EventHandler HasUpdateAvailableChanged;
private bool _hasUpdateAvailable;
@@ -1551,10 +1524,12 @@ namespace Emby.Server.Core
{
if (SupportsAutoRunAtStartup)
{
- NativeApp.ConfigureAutoRun(autorun);
+ ConfigureAutoRunInternal(autorun);
}
}
+ protected abstract void ConfigureAutoRunInternal(bool autorun);
+
/// <summary>
/// This returns localhost in the case of no external dns, and the hostname if the
/// dns is prefixed with a valid Uri prefix.
@@ -1578,16 +1553,15 @@ namespace Emby.Server.Core
}
}
- public void LaunchUrl(string url)
- {
- NativeApp.LaunchUrl(url);
- }
+ public abstract void LaunchUrl(string url);
public void EnableLoopback(string appName)
{
- NativeApp.EnableLoopback(appName);
+ EnableLoopbackInternal(appName);
}
+ protected abstract void EnableLoopbackInternal(string appName);
+
private void RegisterModules()
{
var moduleTypes = GetExportTypes<IDependencyModule>();