Browse Source

Merge pull request #5315 from BaronGreenback/FixFor5280Part2

Joshua M. Boniface 4 years ago
parent
commit
3c46f10e3d

+ 1 - 1
Emby.Dlna/Main/DlnaEntryPoint.cs

@@ -316,7 +316,7 @@ namespace Emby.Dlna.Main
                 _logger.LogInformation("Registering publisher for {0} on {1}", fullService, address);
 
                 var uri = new UriBuilder(_appHost.GetSmartApiUrl(address.Address) + descriptorUri);
-                if (_appHost.PublishedServerUrl == null)
+                if (!string.IsNullOrEmpty(_appHost.PublishedServerUrl))
                 {
                     // DLNA will only work over http, so we must reset to http:// : {port}.
                     uri.Scheme = "http";

+ 17 - 9
Emby.Server.Implementations/ApplicationHost.cs

@@ -43,6 +43,7 @@ using Emby.Server.Implementations.Serialization;
 using Emby.Server.Implementations.Session;
 using Emby.Server.Implementations.SyncPlay;
 using Emby.Server.Implementations.TV;
+using Emby.Server.Implementations.Udp;
 using Emby.Server.Implementations.Updates;
 using Jellyfin.Api.Helpers;
 using Jellyfin.Networking.Configuration;
@@ -99,6 +100,7 @@ using MediaBrowser.Providers.Subtitles;
 using MediaBrowser.XbmcMetadata.Providers;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Prometheus.DotNetRuntime;
@@ -118,6 +120,7 @@ namespace Emby.Server.Implementations
         private static readonly string[] _relevantEnvVarPrefixes = { "JELLYFIN_", "DOTNET_", "ASPNETCORE_" };
 
         private readonly IFileSystem _fileSystemManager;
+        private readonly IConfiguration _startupConfig;
         private readonly IXmlSerializer _xmlSerializer;
         private readonly IStartupOptions _startupOptions;
         private readonly IPluginManager _pluginManager;
@@ -134,9 +137,6 @@ namespace Emby.Server.Implementations
 
         public bool CoreStartupHasCompleted { get; private set; }
 
-        /// <inheritdoc />
-        public Uri PublishedServerUrl => _startupOptions.PublishedServerUrl;
-
         public virtual bool CanLaunchWebBrowser
         {
             get
@@ -230,6 +230,11 @@ namespace Emby.Server.Implementations
         /// </summary>
         public int HttpsPort { get; private set; }
 
+        /// <summary>
+        /// Gets the value of the PublishedServerUrl setting.
+        /// </summary>
+        public string PublishedServerUrl => _startupOptions.PublishedServerUrl ?? _startupConfig[UdpServer.AddressOverrideConfigKey];
+
         /// <summary>
         /// Gets the server configuration manager.
         /// </summary>
@@ -242,12 +247,14 @@ namespace Emby.Server.Implementations
         /// <param name="applicationPaths">Instance of the <see cref="IServerApplicationPaths"/> interface.</param>
         /// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
         /// <param name="options">Instance of the <see cref="IStartupOptions"/> interface.</param>
+        /// <param name="startupConfig">The <see cref="IConfiguration" /> interface.</param>
         /// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
         /// <param name="serviceCollection">Instance of the <see cref="IServiceCollection"/> interface.</param>
         public ApplicationHost(
             IServerApplicationPaths applicationPaths,
             ILoggerFactory loggerFactory,
             IStartupOptions options,
+            IConfiguration startupConfig,
             IFileSystem fileSystem,
             IServiceCollection serviceCollection)
         {
@@ -270,6 +277,7 @@ namespace Emby.Server.Implementations
             Logger = LoggerFactory.CreateLogger<ApplicationHost>();
 
             _startupOptions = options;
+            _startupConfig = startupConfig;
 
             // Initialize runtime stat collection
             if (ServerConfigurationManager.Configuration.EnableMetrics)
@@ -1155,10 +1163,10 @@ namespace Emby.Server.Implementations
         public string GetSmartApiUrl(IPAddress ipAddress, int? port = null)
         {
             // Published server ends with a /
-            if (_startupOptions.PublishedServerUrl != null)
+            if (!string.IsNullOrEmpty(PublishedServerUrl))
             {
                 // Published server ends with a '/', so we need to remove it.
-                return _startupOptions.PublishedServerUrl.ToString().Trim('/');
+                return PublishedServerUrl.Trim('/');
             }
 
             string smart = NetManager.GetBindInterface(ipAddress, out port);
@@ -1175,10 +1183,10 @@ namespace Emby.Server.Implementations
         public string GetSmartApiUrl(HttpRequest request, int? port = null)
         {
             // Published server ends with a /
-            if (_startupOptions.PublishedServerUrl != null)
+            if (!string.IsNullOrEmpty(PublishedServerUrl))
             {
                 // Published server ends with a '/', so we need to remove it.
-                return _startupOptions.PublishedServerUrl.ToString().Trim('/');
+                return PublishedServerUrl.Trim('/');
             }
 
             string smart = NetManager.GetBindInterface(request, out port);
@@ -1195,10 +1203,10 @@ namespace Emby.Server.Implementations
         public string GetSmartApiUrl(string hostname, int? port = null)
         {
             // Published server ends with a /
-            if (_startupOptions.PublishedServerUrl != null)
+            if (!string.IsNullOrEmpty(PublishedServerUrl))
             {
                 // Published server ends with a '/', so we need to remove it.
-                return _startupOptions.PublishedServerUrl.ToString().Trim('/');
+                return PublishedServerUrl.Trim('/');
             }
 
             string smart = NetManager.GetBindInterface(hostname, out port);

+ 6 - 6
Emby.Server.Implementations/IStartupOptions.cs

@@ -1,5 +1,5 @@
 #pragma warning disable CS1591
-
+#nullable enable
 using System;
 
 namespace Emby.Server.Implementations
@@ -9,7 +9,7 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// Gets the value of the --ffmpeg command line option.
         /// </summary>
-        string FFmpegPath { get; }
+        string? FFmpegPath { get; }
 
         /// <summary>
         /// Gets the value of the --service command line option.
@@ -19,21 +19,21 @@ namespace Emby.Server.Implementations
         /// <summary>
         /// Gets the value of the --package-name command line option.
         /// </summary>
-        string PackageName { get; }
+        string? PackageName { get; }
 
         /// <summary>
         /// Gets the value of the --restartpath command line option.
         /// </summary>
-        string RestartPath { get; }
+        string? RestartPath { get; }
 
         /// <summary>
         /// Gets the value of the --restartargs command line option.
         /// </summary>
-        string RestartArgs { get; }
+        string? RestartArgs { get; }
 
         /// <summary>
         /// Gets the value of the --published-server-url command line option.
         /// </summary>
-        Uri PublishedServerUrl { get; }
+        string? PublishedServerUrl { get; }
     }
 }

+ 4 - 0
Jellyfin.Server/CoreAppHost.cs

@@ -20,6 +20,7 @@ using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Activity;
 using MediaBrowser.Model.IO;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 
@@ -36,18 +37,21 @@ namespace Jellyfin.Server
         /// <param name="applicationPaths">The <see cref="ServerApplicationPaths" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="loggerFactory">The <see cref="ILoggerFactory" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="options">The <see cref="StartupOptions" /> to be used by the <see cref="CoreAppHost" />.</param>
+        /// <param name="startupConfig">The <see cref="IConfiguration" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="fileSystem">The <see cref="IFileSystem" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="collection">The <see cref="IServiceCollection"/> to be used by the <see cref="CoreAppHost"/>.</param>
         public CoreAppHost(
             IServerApplicationPaths applicationPaths,
             ILoggerFactory loggerFactory,
             IStartupOptions options,
+            IConfiguration startupConfig,
             IFileSystem fileSystem,
             IServiceCollection collection)
             : base(
                 applicationPaths,
                 loggerFactory,
                 options,
+                startupConfig,
                 fileSystem,
                 collection)
         {

+ 1 - 0
Jellyfin.Server/Program.cs

@@ -164,6 +164,7 @@ namespace Jellyfin.Server
                 appPaths,
                 _loggerFactory,
                 options,
+                startupConfig,
                 new ManagedFileSystem(_loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
                 serviceCollection);
 

+ 2 - 2
Jellyfin.Server/StartupOptions.cs

@@ -77,7 +77,7 @@ namespace Jellyfin.Server
 
         /// <inheritdoc />
         [Option("published-server-url", Required = false, HelpText = "Jellyfin Server URL to publish via auto discover process")]
-        public Uri? PublishedServerUrl { get; set; }
+        public string? PublishedServerUrl { get; set; }
 
         /// <summary>
         /// Gets the command line options as a dictionary that can be used in the .NET configuration system.
@@ -94,7 +94,7 @@ namespace Jellyfin.Server
 
             if (PublishedServerUrl != null)
             {
-                config.Add(UdpServer.AddressOverrideConfigKey, PublishedServerUrl.ToString());
+                config.Add(UdpServer.AddressOverrideConfigKey, PublishedServerUrl);
             }
 
             if (FFmpegPath != null)

+ 1 - 1
MediaBrowser.Controller/IServerApplicationHost.cs

@@ -55,7 +55,7 @@ namespace MediaBrowser.Controller
         /// <summary>
         /// Gets the configured published server url.
         /// </summary>
-        Uri PublishedServerUrl { get; }
+        string PublishedServerUrl { get; }
 
         /// <summary>
         /// Gets the system info.

+ 2 - 0
tests/Jellyfin.Api.Tests/JellyfinApplicationFactory.cs

@@ -9,6 +9,7 @@ using MediaBrowser.Common;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Mvc.Testing;
 using Microsoft.AspNetCore.TestHost;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Serilog;
@@ -78,6 +79,7 @@ namespace Jellyfin.Api.Tests
                 appPaths,
                 loggerFactory,
                 commandLineOpts,
+                new ConfigurationBuilder().Build(),
                 new ManagedFileSystem(loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
                 serviceCollection);
             _disposableComponents.Add(appHost);

+ 4 - 0
tests/Jellyfin.Api.Tests/TestAppHost.cs

@@ -4,6 +4,7 @@ using Emby.Server.Implementations;
 using Jellyfin.Server;
 using MediaBrowser.Controller;
 using MediaBrowser.Model.IO;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 
@@ -20,18 +21,21 @@ namespace Jellyfin.Api.Tests
         /// <param name="applicationPaths">The <see cref="ServerApplicationPaths" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="loggerFactory">The <see cref="ILoggerFactory" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="options">The <see cref="StartupOptions" /> to be used by the <see cref="CoreAppHost" />.</param>
+        /// <param name="startup">The <see cref="IConfiguration" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="fileSystem">The <see cref="IFileSystem" /> to be used by the <see cref="CoreAppHost" />.</param>
         /// <param name="collection">The <see cref="IServiceCollection"/> to be used by the <see cref="CoreAppHost"/>.</param>
         public TestAppHost(
             IServerApplicationPaths applicationPaths,
             ILoggerFactory loggerFactory,
             IStartupOptions options,
+            IConfiguration startup,
             IFileSystem fileSystem,
             IServiceCollection collection)
             : base(
                 applicationPaths,
                 loggerFactory,
                 options,
+                startup,
                 fileSystem,
                 collection)
         {