Merge command line options into framework configuration

This commit is contained in:
Mark Monteiro 2020-03-15 15:34:09 +01:00
parent 0996ce2898
commit 2a01537371
2 changed files with 28 additions and 8 deletions

View File

@ -113,9 +113,10 @@ namespace Jellyfin.Server
// $JELLYFIN_LOG_DIR needs to be set for the logger configuration manager // $JELLYFIN_LOG_DIR needs to be set for the logger configuration manager
Environment.SetEnvironmentVariable("JELLYFIN_LOG_DIR", appPaths.LogDirectoryPath); Environment.SetEnvironmentVariable("JELLYFIN_LOG_DIR", appPaths.LogDirectoryPath);
// Create an instance of the application configuration to use for application startup
await InitLoggingConfigFile(appPaths).ConfigureAwait(false); await InitLoggingConfigFile(appPaths).ConfigureAwait(false);
IConfiguration startupConfig = CreateAppConfiguration(appPaths);
// Create an instance of the application configuration to use for application startup
IConfiguration startupConfig = CreateAppConfiguration(options, appPaths);
// Initialize logging framework // Initialize logging framework
InitializeLoggingFramework(startupConfig, appPaths); InitializeLoggingFramework(startupConfig, appPaths);
@ -189,7 +190,7 @@ namespace Jellyfin.Server
ServiceCollection serviceCollection = new ServiceCollection(); ServiceCollection serviceCollection = new ServiceCollection();
await appHost.InitAsync(serviceCollection, startupConfig).ConfigureAwait(false); await appHost.InitAsync(serviceCollection, startupConfig).ConfigureAwait(false);
var webHost = CreateWebHostBuilder(appHost, serviceCollection, startupConfig, appPaths).Build(); var webHost = CreateWebHostBuilder(appHost, serviceCollection, options, startupConfig, appPaths).Build();
// Re-use the web host service provider in the app host since ASP.NET doesn't allow a custom service collection. // Re-use the web host service provider in the app host since ASP.NET doesn't allow a custom service collection.
appHost.ServiceProvider = webHost.Services; appHost.ServiceProvider = webHost.Services;
@ -238,6 +239,7 @@ namespace Jellyfin.Server
private static IWebHostBuilder CreateWebHostBuilder( private static IWebHostBuilder CreateWebHostBuilder(
ApplicationHost appHost, ApplicationHost appHost,
IServiceCollection serviceCollection, IServiceCollection serviceCollection,
StartupOptions commandLineOpts,
IConfiguration startupConfig, IConfiguration startupConfig,
IApplicationPaths appPaths) IApplicationPaths appPaths)
{ {
@ -279,7 +281,7 @@ namespace Jellyfin.Server
} }
} }
}) })
.ConfigureAppConfiguration(config => config.ConfigureAppConfiguration(appPaths, startupConfig)) .ConfigureAppConfiguration(config => config.ConfigureAppConfiguration(commandLineOpts, appPaths, startupConfig))
.UseSerilog() .UseSerilog()
.ConfigureServices(services => .ConfigureServices(services =>
{ {
@ -493,14 +495,18 @@ namespace Jellyfin.Server
await resource.CopyToAsync(dst).ConfigureAwait(false); await resource.CopyToAsync(dst).ConfigureAwait(false);
} }
private static IConfiguration CreateAppConfiguration(IApplicationPaths appPaths) private static IConfiguration CreateAppConfiguration(StartupOptions commandLineOpts, IApplicationPaths appPaths)
{ {
return new ConfigurationBuilder() return new ConfigurationBuilder()
.ConfigureAppConfiguration(appPaths) .ConfigureAppConfiguration(commandLineOpts, appPaths)
.Build(); .Build();
} }
private static IConfigurationBuilder ConfigureAppConfiguration(this IConfigurationBuilder config, IApplicationPaths appPaths, IConfiguration? startupConfig = null) private static IConfigurationBuilder ConfigureAppConfiguration(
this IConfigurationBuilder config,
StartupOptions commandLineOpts,
IApplicationPaths appPaths,
IConfiguration? startupConfig = null)
{ {
// Use the swagger API page as the default redirect path if not hosting the jellyfin-web content // Use the swagger API page as the default redirect path if not hosting the jellyfin-web content
var inMemoryDefaultConfig = ConfigurationOptions.DefaultConfiguration; var inMemoryDefaultConfig = ConfigurationOptions.DefaultConfiguration;
@ -514,7 +520,8 @@ namespace Jellyfin.Server
.AddInMemoryCollection(inMemoryDefaultConfig) .AddInMemoryCollection(inMemoryDefaultConfig)
.AddJsonFile(LoggingConfigFileDefault, optional: false, reloadOnChange: true) .AddJsonFile(LoggingConfigFileDefault, optional: false, reloadOnChange: true)
.AddJsonFile(LoggingConfigFileSystem, optional: true, reloadOnChange: true) .AddJsonFile(LoggingConfigFileSystem, optional: true, reloadOnChange: true)
.AddEnvironmentVariables("JELLYFIN_"); .AddEnvironmentVariables("JELLYFIN_")
.AddInMemoryCollection(commandLineOpts.ConvertToConfig());
} }
/// <summary> /// <summary>

View File

@ -1,5 +1,8 @@
using System.Collections.Generic;
using System.Globalization;
using CommandLine; using CommandLine;
using Emby.Server.Implementations; using Emby.Server.Implementations;
using MediaBrowser.Controller.Extensions;
namespace Jellyfin.Server namespace Jellyfin.Server
{ {
@ -72,5 +75,15 @@ namespace Jellyfin.Server
/// <inheritdoc /> /// <inheritdoc />
[Option("restartargs", Required = false, HelpText = "Arguments for restart script.")] [Option("restartargs", Required = false, HelpText = "Arguments for restart script.")]
public string? RestartArgs { get; set; } public string? RestartArgs { get; set; }
/// <summary>
/// Gets the command line options as a dictionary that can be used in the .NET configuration system.
/// </summary>
/// <returns>The configuration dictionary.</returns>
public Dictionary<string, string> ConvertToConfig()
=> new Dictionary<string, string>
{
{ ConfigurationExtensions.NoWebContentKey, NoWebContent.ToString(CultureInfo.InvariantCulture) }
};
} }
} }