mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-03 06:18:28 +01:00
remove and/or delay unnecessary startup work
This commit is contained in:
@@ -146,8 +146,12 @@ namespace MediaBrowser.ServerApplication
|
||||
/// <value>The display preferences manager.</value>
|
||||
internal IDisplayPreferencesManager DisplayPreferencesManager { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the media encoder.
|
||||
/// </summary>
|
||||
/// <value>The media encoder.</value>
|
||||
private IMediaEncoder MediaEncoder { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The full path to our startmenu shortcut
|
||||
/// </summary>
|
||||
@@ -162,13 +166,12 @@ namespace MediaBrowser.ServerApplication
|
||||
/// <returns>Task.</returns>
|
||||
protected override async Task RunStartupTasks()
|
||||
{
|
||||
// Do these before allowing the base method to run, which will invoke startup scheduled tasks
|
||||
await ServerKernel.LoadRepositories(ServerConfigurationManager).ConfigureAwait(false);
|
||||
|
||||
await base.RunStartupTasks().ConfigureAwait(false);
|
||||
|
||||
DirectoryWatchers.Start();
|
||||
|
||||
Logger.Info("Core startup complete");
|
||||
|
||||
Parallel.ForEach(GetExports<IServerEntryPoint>(), entryPoint => entryPoint.Run());
|
||||
}
|
||||
|
||||
@@ -180,6 +183,12 @@ namespace MediaBrowser.ServerApplication
|
||||
{
|
||||
ServerKernel = new Kernel(ServerConfigurationManager);
|
||||
|
||||
var httpServerTask = Task.Run(() =>
|
||||
{
|
||||
HttpServer = ServerFactory.CreateServer(this, Logger, "Media Browser", "index.html");
|
||||
RegisterSingleInstance(HttpServer, false);
|
||||
});
|
||||
|
||||
await base.RegisterResources().ConfigureAwait(false);
|
||||
|
||||
RegisterSingleInstance<IHttpResultFactory>(new HttpResultFactory(LogManager));
|
||||
@@ -192,22 +201,16 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger));
|
||||
|
||||
RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger));
|
||||
RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer());
|
||||
RegisterSingleInstance<IIsoManager>(() => new PismoIsoManager(Logger));
|
||||
RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer());
|
||||
|
||||
ZipClient = new DotNetZipClient();
|
||||
RegisterSingleInstance(ZipClient);
|
||||
|
||||
HttpServer = ServerFactory.CreateServer(this, Logger, "Media Browser", "index.html");
|
||||
RegisterSingleInstance(HttpServer, false);
|
||||
|
||||
ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel);
|
||||
RegisterSingleInstance(ServerManager);
|
||||
|
||||
UserManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager);
|
||||
UserManager = new UserManager(Logger, ServerConfigurationManager);
|
||||
RegisterSingleInstance(UserManager);
|
||||
|
||||
LibraryManager = new LibraryManager(ServerKernel, Logger, TaskManager, UserManager, ServerConfigurationManager);
|
||||
LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager);
|
||||
RegisterSingleInstance(LibraryManager);
|
||||
|
||||
InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this);
|
||||
@@ -227,9 +230,17 @@ namespace MediaBrowser.ServerApplication
|
||||
MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ZipClient, ApplicationPaths, JsonSerializer);
|
||||
RegisterSingleInstance(MediaEncoder);
|
||||
|
||||
await ConfigureRepositories().ConfigureAwait(false);
|
||||
ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel);
|
||||
RegisterSingleInstance(ServerManager);
|
||||
|
||||
var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false));
|
||||
var itemsTask = Task.Run(async () => await ConfigureItemRepositories().ConfigureAwait(false));
|
||||
var userdataTask = Task.Run(async () => await ConfigureUserDataRepositories().ConfigureAwait(false));
|
||||
var userTask = Task.Run(async () => await ConfigureUserRepositories().ConfigureAwait(false));
|
||||
|
||||
await Task.WhenAll(httpServerTask, itemsTask, userTask, displayPreferencesTask, userdataTask).ConfigureAwait(false);
|
||||
|
||||
SetKernelProperties();
|
||||
SetStaticProperties();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -237,16 +248,13 @@ namespace MediaBrowser.ServerApplication
|
||||
/// </summary>
|
||||
private void SetKernelProperties()
|
||||
{
|
||||
ServerKernel.FFMpegManager = new FFMpegManager(ServerKernel, ApplicationPaths, MediaEncoder);
|
||||
ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), ApplicationPaths);
|
||||
|
||||
Parallel.Invoke(
|
||||
() => ServerKernel.UserDataRepositories = GetExports<IUserDataRepository>(),
|
||||
() => ServerKernel.UserRepositories = GetExports<IUserRepository>(),
|
||||
() => ServerKernel.ItemRepositories = GetExports<IItemRepository>(),
|
||||
() => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, LibraryManager),
|
||||
() => ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), ApplicationPaths),
|
||||
() => ServerKernel.WeatherProviders = GetExports<IWeatherProvider>(),
|
||||
() => ServerKernel.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(),
|
||||
() => ServerKernel.StringFiles = GetExports<LocalizedStringData>()
|
||||
() => ServerKernel.StringFiles = GetExports<LocalizedStringData>(),
|
||||
SetStaticProperties
|
||||
);
|
||||
}
|
||||
|
||||
@@ -254,15 +262,56 @@ namespace MediaBrowser.ServerApplication
|
||||
/// Configures the repositories.
|
||||
/// </summary>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task ConfigureRepositories()
|
||||
private async Task ConfigureDisplayPreferencesRepositories()
|
||||
{
|
||||
var displayPreferencesRepositories = GetExports<IDisplayPreferencesRepository>();
|
||||
var repositories = GetExports<IDisplayPreferencesRepository>();
|
||||
|
||||
var repo = GetRepository(displayPreferencesRepositories, ServerConfigurationManager.Configuration.DisplayPreferencesRepository);
|
||||
var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.DisplayPreferencesRepository);
|
||||
|
||||
await repo.Initialize().ConfigureAwait(false);
|
||||
await repository.Initialize().ConfigureAwait(false);
|
||||
|
||||
((DisplayPreferencesManager)DisplayPreferencesManager).Repository = repo;
|
||||
((DisplayPreferencesManager)DisplayPreferencesManager).Repository = repository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures the item repositories.
|
||||
/// </summary>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task ConfigureItemRepositories()
|
||||
{
|
||||
var repositories = GetExports<IItemRepository>();
|
||||
|
||||
var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.ItemRepository);
|
||||
|
||||
await repository.Initialize().ConfigureAwait(false);
|
||||
|
||||
((LibraryManager)LibraryManager).ItemRepository = repository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures the user data repositories.
|
||||
/// </summary>
|
||||
/// <returns>Task.</returns>
|
||||
private async Task ConfigureUserDataRepositories()
|
||||
{
|
||||
var repositories = GetExports<IUserDataRepository>();
|
||||
|
||||
var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.UserDataRepository);
|
||||
|
||||
await repository.Initialize().ConfigureAwait(false);
|
||||
|
||||
((UserManager)UserManager).UserDataRepository = repository;
|
||||
}
|
||||
|
||||
private async Task ConfigureUserRepositories()
|
||||
{
|
||||
var repositories = GetExports<IUserRepository>();
|
||||
|
||||
var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.UserRepository);
|
||||
|
||||
await repository.Initialize().ConfigureAwait(false);
|
||||
|
||||
((UserManager)UserManager).UserRepository = repository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -286,8 +335,6 @@ namespace MediaBrowser.ServerApplication
|
||||
/// </summary>
|
||||
protected override void FindParts()
|
||||
{
|
||||
base.FindParts();
|
||||
|
||||
if (IsFirstRun)
|
||||
{
|
||||
RegisterServerWithAdministratorAccess();
|
||||
@@ -295,6 +342,8 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
Parallel.Invoke(
|
||||
|
||||
() => base.FindParts(),
|
||||
|
||||
() =>
|
||||
{
|
||||
HttpServer.Init(GetExports<IRestfulService>(false));
|
||||
@@ -305,19 +354,22 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
() => LibraryManager.AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>(), GetExports<IBaseItemComparer>()),
|
||||
|
||||
() => ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray())
|
||||
() => ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray()),
|
||||
|
||||
() =>
|
||||
{
|
||||
UdpServer = new UdpServer(Logger, NetworkManager, ServerConfigurationManager);
|
||||
|
||||
try
|
||||
{
|
||||
UdpServer.Start(UdpServerPort);
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
Logger.ErrorException("Failed to start UDP Server", ex);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
UdpServer = new UdpServer(Logger, NetworkManager, ServerConfigurationManager);
|
||||
|
||||
try
|
||||
{
|
||||
UdpServer.Start(UdpServerPort);
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
Logger.ErrorException("Failed to start UDP Server", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
using MediaBrowser.Common.Security;
|
||||
using MediaBrowser.Controller.Plugins;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
|
||||
namespace MediaBrowser.ServerApplication.EntryPoints
|
||||
{
|
||||
/// <summary>
|
||||
/// Class LoadRegistrations
|
||||
/// </summary>
|
||||
public class LoadRegistrations : IServerEntryPoint
|
||||
{
|
||||
/// <summary>
|
||||
/// The _security manager
|
||||
/// </summary>
|
||||
private readonly ISecurityManager _securityManager;
|
||||
|
||||
/// <summary>
|
||||
/// The _logger
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LoadRegistrations" /> class.
|
||||
/// </summary>
|
||||
/// <param name="securityManager">The security manager.</param>
|
||||
/// <param name="logManager">The log manager.</param>
|
||||
public LoadRegistrations(ISecurityManager securityManager, ILogManager logManager)
|
||||
{
|
||||
_securityManager = securityManager;
|
||||
|
||||
_logger = logManager.GetLogger("Registration Loader");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs this instance.
|
||||
/// </summary>
|
||||
public async void Run()
|
||||
{
|
||||
try
|
||||
{
|
||||
await _securityManager.LoadAllRegistrationInfo().ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.ErrorException("Error loading registration info", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
|
||||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,6 +181,7 @@
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="EntryPoints\LoadRegistrations.cs" />
|
||||
<Compile Include="EntryPoints\NewItemNotifier.cs" />
|
||||
<Compile Include="EntryPoints\RefreshUsersMetadata.cs" />
|
||||
<Compile Include="EntryPoints\StartupWizard.cs" />
|
||||
|
||||
Reference in New Issue
Block a user