update .net core startup

This commit is contained in:
Luke Pulverenti
2016-11-12 23:33:51 -05:00
parent 3e06bda46b
commit 95341c5c96
20 changed files with 602 additions and 632 deletions

View File

@@ -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>();