浏览代码

Move check for web client directory to application startup in Program.cs

Mark Monteiro 5 年之前
父节点
当前提交
ca85bef7c5
共有 2 个文件被更改,包括 33 次插入12 次删除
  1. 16 0
      Jellyfin.Server/Program.cs
  2. 17 12
      MediaBrowser.WebDashboard/Api/DashboardService.cs

+ 16 - 0
Jellyfin.Server/Program.cs

@@ -20,6 +20,7 @@ using Jellyfin.Drawing.Skia;
 using MediaBrowser.Common.Configuration;
 using MediaBrowser.Controller.Drawing;
 using MediaBrowser.Controller.Extensions;
+using MediaBrowser.WebDashboard.Api;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
@@ -185,8 +186,23 @@ namespace Jellyfin.Server
                 new ManagedFileSystem(_loggerFactory.CreateLogger<ManagedFileSystem>(), appPaths),
                 GetImageEncoder(appPaths),
                 new NetworkManager(_loggerFactory.CreateLogger<NetworkManager>()));
+
             try
             {
+                // If hosting the web client, validate the client content path
+                if (startupConfig.HostWebClient())
+                {
+                    string webContentPath = DashboardService.GetDashboardUIPath(startupConfig, appHost.ServerConfigurationManager);
+                    if (!Directory.Exists(webContentPath) || Directory.GetFiles(webContentPath).Length == 0)
+                    {
+                        throw new InvalidOperationException(
+                            "The server is expected to host the web client, but the provided content directory is either " +
+                            $"invalid or empty: {webContentPath}. If you do not want to host the web client with the " +
+                            "server, you may set the '--nowebclient' command line flag, or set" +
+                            $"'{MediaBrowser.Controller.Extensions.ConfigurationExtensions.HostWebClientKey}=false' in your config settings.");
+                    }
+                }
+
                 ServiceCollection serviceCollection = new ServiceCollection();
                 await appHost.InitAsync(serviceCollection, startupConfig).ConfigureAwait(false);
 

+ 17 - 12
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -161,22 +161,27 @@ namespace MediaBrowser.WebDashboard.Api
         /// Gets the path of the directory containing the static web interface content, or null if the server is not
         /// hosting the web client.
         /// </summary>
-        public string DashboardUIPath
+        public string DashboardUIPath => GetDashboardUIPath(_appConfig, _serverConfigurationManager);
+
+        /// <summary>
+        /// Gets the path of the directory containing the static web interface content.
+        /// </summary>
+        /// <param name="appConfig">The app configuration.</param>
+        /// <param name="serverConfigManager">The server configuration manager.</param>
+        /// <returns>The directory path, or null if the server is not hosting the web client.</returns>
+        public static string GetDashboardUIPath(IConfiguration appConfig, IServerConfigurationManager serverConfigManager)
         {
-            get
+            if (!appConfig.HostWebClient())
             {
-                if (!_appConfig.HostWebClient())
-                {
-                    return null;
-                }
-
-                if (!string.IsNullOrEmpty(_serverConfigurationManager.Configuration.DashboardSourcePath))
-                {
-                    return _serverConfigurationManager.Configuration.DashboardSourcePath;
-                }
+                return null;
+            }
 
-                return _serverConfigurationManager.ApplicationPaths.WebPath;
+            if (!string.IsNullOrEmpty(serverConfigManager.Configuration.DashboardSourcePath))
+            {
+                return serverConfigManager.Configuration.DashboardSourcePath;
             }
+
+            return serverConfigManager.ApplicationPaths.WebPath;
         }
 
         [SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "request", Justification = "Required for ServiceStack")]