mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-29 02:50:55 +01:00
Merge branch 'master' into release-10.3.z
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Emby.Server.Implementations;
|
||||
using Emby.Server.Implementations.HttpServer;
|
||||
using MediaBrowser.Common.Net;
|
||||
using MediaBrowser.Controller.Drawing;
|
||||
using MediaBrowser.Model.IO;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -15,8 +16,8 @@ namespace Jellyfin.Server
|
||||
ILoggerFactory loggerFactory,
|
||||
StartupOptions options,
|
||||
IFileSystem fileSystem,
|
||||
MediaBrowser.Controller.Drawing.IImageEncoder imageEncoder,
|
||||
MediaBrowser.Common.Net.INetworkManager networkManager,
|
||||
IImageEncoder imageEncoder,
|
||||
INetworkManager networkManager,
|
||||
IConfiguration configuration)
|
||||
: base(
|
||||
applicationPaths,
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<!-- We need C# 7.1 for async main-->
|
||||
<LangVersion>latest</LangVersion>
|
||||
<!-- Disable documentation warnings (for now) -->
|
||||
<NoWarn>SA1600;SA1601;CS1591</NoWarn>
|
||||
<NoWarn>SA1600;SA1601;SA1629;CS1591</NoWarn>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
<!-- Code analysers-->
|
||||
<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.3" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2" />
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.3" />
|
||||
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
|
||||
<PackageReference Include="SerilogAnalyzer" Version="0.15.0" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -36,17 +36,17 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommandLineParser" Version="2.4.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.0" />
|
||||
<PackageReference Include="CommandLineParser" Version="2.5.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
|
||||
<PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
|
||||
<PackageReference Include="Serilog.Sinks.Async" Version="1.3.0" />
|
||||
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="4.0.0" />
|
||||
<PackageReference Include="SkiaSharp" Version="1.68.0" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="1.1.13" />
|
||||
<PackageReference Include="SQLitePCLRaw.provider.sqlite3.netstandard11" Version="1.1.13" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="1.1.14" />
|
||||
<PackageReference Include="SQLitePCLRaw.provider.sqlite3.netstandard11" Version="1.1.14" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -24,6 +24,7 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Serilog;
|
||||
using Serilog.AspNetCore;
|
||||
using SQLitePCL;
|
||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||
|
||||
namespace Jellyfin.Server
|
||||
@@ -34,9 +35,8 @@ namespace Jellyfin.Server
|
||||
private static readonly ILoggerFactory _loggerFactory = new SerilogLoggerFactory();
|
||||
private static ILogger _logger;
|
||||
private static bool _restartOnShutdown;
|
||||
private static IConfiguration appConfig;
|
||||
|
||||
public static async Task Main(string[] args)
|
||||
public static Task Main(string[] args)
|
||||
{
|
||||
// For backwards compatibility.
|
||||
// Modify any input arguments now which start with single-hyphen to POSIX standard
|
||||
@@ -50,8 +50,8 @@ namespace Jellyfin.Server
|
||||
}
|
||||
|
||||
// Parse the command line arguments and either start the app or exit indicating error
|
||||
await Parser.Default.ParseArguments<StartupOptions>(args)
|
||||
.MapResult(StartApp, _ => Task.CompletedTask).ConfigureAwait(false);
|
||||
return Parser.Default.ParseArguments<StartupOptions>(args)
|
||||
.MapResult(StartApp, _ => Task.CompletedTask);
|
||||
}
|
||||
|
||||
public static void Shutdown()
|
||||
@@ -76,7 +76,7 @@ namespace Jellyfin.Server
|
||||
// $JELLYFIN_LOG_DIR needs to be set for the logger configuration manager
|
||||
Environment.SetEnvironmentVariable("JELLYFIN_LOG_DIR", appPaths.LogDirectoryPath);
|
||||
|
||||
appConfig = await CreateConfiguration(appPaths).ConfigureAwait(false);
|
||||
IConfiguration appConfig = await CreateConfiguration(appPaths).ConfigureAwait(false);
|
||||
|
||||
CreateLogger(appConfig, appPaths);
|
||||
|
||||
@@ -116,7 +116,12 @@ namespace Jellyfin.Server
|
||||
|
||||
ApplicationHost.LogEnvironmentInfo(_logger, appPaths);
|
||||
|
||||
SQLitePCL.Batteries_V2.Init();
|
||||
// Increase the max http request limit
|
||||
// The default connection limit is 10 for ASP.NET hosted applications and 2 for all others.
|
||||
ServicePointManager.DefaultConnectionLimit = Math.Max(96, ServicePointManager.DefaultConnectionLimit);
|
||||
|
||||
// CA5359: Do Not Disable Certificate Validation
|
||||
#pragma warning disable CA5359
|
||||
|
||||
// Increase the max http request limit
|
||||
// The default connection limit is 10 for ASP.NET hosted applications and 2 for all others.
|
||||
@@ -133,20 +138,24 @@ namespace Jellyfin.Server
|
||||
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
|
||||
#pragma warning restore CA5359
|
||||
|
||||
var fileSystem = new ManagedFileSystem(_loggerFactory, appPaths);
|
||||
Batteries_V2.Init();
|
||||
if (raw.sqlite3_enable_shared_cache(1) != raw.SQLITE_OK)
|
||||
{
|
||||
Console.WriteLine("WARN: Failed to enable shared cache for SQLite");
|
||||
}
|
||||
|
||||
using (var appHost = new CoreAppHost(
|
||||
appPaths,
|
||||
_loggerFactory,
|
||||
options,
|
||||
fileSystem,
|
||||
new ManagedFileSystem(_loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
|
||||
new NullImageEncoder(),
|
||||
new NetworkManager(_loggerFactory),
|
||||
appConfig))
|
||||
{
|
||||
await appHost.InitAsync(new ServiceCollection()).ConfigureAwait(false);
|
||||
|
||||
appHost.ImageProcessor.ImageEncoder = GetImageEncoder(fileSystem, appPaths, appHost.LocalizationManager);
|
||||
appHost.ImageProcessor.ImageEncoder = GetImageEncoder(appPaths, appHost.LocalizationManager);
|
||||
|
||||
await appHost.RunStartupTasksAsync().ConfigureAwait(false);
|
||||
|
||||
@@ -169,7 +178,7 @@ namespace Jellyfin.Server
|
||||
|
||||
/// <summary>
|
||||
/// Create the data, config and log paths from the variety of inputs(command line args,
|
||||
/// environment variables) or decide on what default to use. For Windows it's %AppPath%
|
||||
/// environment variables) or decide on what default to use. For Windows it's %AppPath%
|
||||
/// for everything else the XDG approach is followed:
|
||||
/// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||
/// </summary>
|
||||
@@ -191,7 +200,9 @@ namespace Jellyfin.Server
|
||||
if (string.IsNullOrEmpty(dataDir))
|
||||
{
|
||||
// LocalApplicationData follows the XDG spec on unix machines
|
||||
dataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "jellyfin");
|
||||
dataDir = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
"jellyfin");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,20 +221,26 @@ namespace Jellyfin.Server
|
||||
|
||||
if (string.IsNullOrEmpty(configDir))
|
||||
{
|
||||
if (options.DataDir != null || Directory.Exists(Path.Combine(dataDir, "config")) || RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
if (options.DataDir != null
|
||||
|| Directory.Exists(Path.Combine(dataDir, "config"))
|
||||
|| RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
// Hang config folder off already set dataDir
|
||||
configDir = Path.Combine(dataDir, "config");
|
||||
}
|
||||
else
|
||||
{
|
||||
// $XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored.
|
||||
// $XDG_CONFIG_HOME defines the base directory relative to which
|
||||
// user specific configuration files should be stored.
|
||||
configDir = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME");
|
||||
|
||||
// If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME /.config should be used.
|
||||
// If $XDG_CONFIG_HOME is either not set or empty,
|
||||
// a default equal to $HOME /.config should be used.
|
||||
if (string.IsNullOrEmpty(configDir))
|
||||
{
|
||||
configDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".config");
|
||||
configDir = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||
".config");
|
||||
}
|
||||
|
||||
configDir = Path.Combine(configDir, "jellyfin");
|
||||
@@ -251,13 +268,17 @@ namespace Jellyfin.Server
|
||||
}
|
||||
else
|
||||
{
|
||||
// $XDG_CACHE_HOME defines the base directory relative to which user specific non-essential data files should be stored.
|
||||
// $XDG_CACHE_HOME defines the base directory relative to which
|
||||
// user specific non-essential data files should be stored.
|
||||
cacheDir = Environment.GetEnvironmentVariable("XDG_CACHE_HOME");
|
||||
|
||||
// If $XDG_CACHE_HOME is either not set or empty, a default equal to $HOME/.cache should be used.
|
||||
// If $XDG_CACHE_HOME is either not set or empty,
|
||||
// a default equal to $HOME/.cache should be used.
|
||||
if (string.IsNullOrEmpty(cacheDir))
|
||||
{
|
||||
cacheDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".cache");
|
||||
cacheDir = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||
".cache");
|
||||
}
|
||||
|
||||
cacheDir = Path.Combine(cacheDir, "jellyfin");
|
||||
@@ -366,17 +387,22 @@ namespace Jellyfin.Server
|
||||
}
|
||||
|
||||
private static IImageEncoder GetImageEncoder(
|
||||
IFileSystem fileSystem,
|
||||
IApplicationPaths appPaths,
|
||||
ILocalizationManager localizationManager)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new SkiaEncoder(_loggerFactory, appPaths, fileSystem, localizationManager);
|
||||
// Test if the native lib is available
|
||||
SkiaEncoder.TestSkia();
|
||||
|
||||
return new SkiaEncoder(
|
||||
_loggerFactory.CreateLogger<SkiaEncoder>(),
|
||||
appPaths,
|
||||
localizationManager);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogInformation(ex, "Skia not available. Will fallback to NullIMageEncoder. {0}");
|
||||
_logger.LogWarning(ex, "Skia not available. Will fallback to NullIMageEncoder.");
|
||||
}
|
||||
|
||||
return new NullImageEncoder();
|
||||
@@ -390,7 +416,7 @@ namespace Jellyfin.Server
|
||||
|
||||
if (string.IsNullOrWhiteSpace(module))
|
||||
{
|
||||
module = Environment.GetCommandLineArgs().First();
|
||||
module = Environment.GetCommandLineArgs()[0];
|
||||
}
|
||||
|
||||
string commandLineArgsString;
|
||||
@@ -402,7 +428,7 @@ namespace Jellyfin.Server
|
||||
else
|
||||
{
|
||||
commandLineArgsString = string.Join(
|
||||
" ",
|
||||
' ',
|
||||
Environment.GetCommandLineArgs().Skip(1).Select(NormalizeCommandLineArgument));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user