瀏覽代碼

Re-add shutdown/restart methods

Patrick Barron 1 年之前
父節點
當前提交
f746db9a54

+ 19 - 0
Emby.Server.Implementations/ApplicationHost.cs

@@ -101,6 +101,7 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Prometheus.DotNetRuntime;
 using static MediaBrowser.Controller.Extensions.ConfigurationExtensions;
@@ -850,6 +851,24 @@ namespace Emby.Server.Implementations
             }
         }
 
+        /// <inheritdoc />
+        public void Restart()
+        {
+            ShouldRestart = true;
+            Shutdown();
+        }
+
+        /// <inheritdoc />
+        public void Shutdown()
+        {
+            Task.Run(async () =>
+            {
+                await Task.Delay(100).ConfigureAwait(false);
+                IsShuttingDown = true;
+                Resolve<IHostApplicationLifetime>().StopApplication();
+            });
+        }
+
         /// <summary>
         /// Gets the composable part assemblies.
         /// </summary>

+ 3 - 20
Jellyfin.Api/Controllers/SystemController.cs

@@ -4,7 +4,6 @@ using System.ComponentModel.DataAnnotations;
 using System.IO;
 using System.Linq;
 using System.Net.Mime;
-using System.Threading.Tasks;
 using Jellyfin.Api.Attributes;
 using Jellyfin.Api.Constants;
 using MediaBrowser.Common.Configuration;
@@ -18,7 +17,6 @@ using MediaBrowser.Model.System;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 
 namespace Jellyfin.Api.Controllers;
@@ -33,7 +31,6 @@ public class SystemController : BaseJellyfinApiController
     private readonly IFileSystem _fileSystem;
     private readonly INetworkManager _network;
     private readonly ILogger<SystemController> _logger;
-    private readonly IHostApplicationLifetime _hostApplicationLifetime;
 
     /// <summary>
     /// Initializes a new instance of the <see cref="SystemController"/> class.
@@ -43,21 +40,18 @@ public class SystemController : BaseJellyfinApiController
     /// <param name="fileSystem">Instance of <see cref="IFileSystem"/> interface.</param>
     /// <param name="network">Instance of <see cref="INetworkManager"/> interface.</param>
     /// <param name="logger">Instance of <see cref="ILogger{SystemController}"/> interface.</param>
-    /// <param name="hostApplicationLifetime">Instance of <see cref="IHostApplicationLifetime"/> interface.</param>
     public SystemController(
         IServerConfigurationManager serverConfigurationManager,
         IServerApplicationHost appHost,
         IFileSystem fileSystem,
         INetworkManager network,
-        ILogger<SystemController> logger,
-        IHostApplicationLifetime hostApplicationLifetime)
+        ILogger<SystemController> logger)
     {
         _appPaths = serverConfigurationManager.ApplicationPaths;
         _appHost = appHost;
         _fileSystem = fileSystem;
         _network = network;
         _logger = logger;
-        _hostApplicationLifetime = hostApplicationLifetime;
     }
 
     /// <summary>
@@ -112,13 +106,7 @@ public class SystemController : BaseJellyfinApiController
     [ProducesResponseType(StatusCodes.Status403Forbidden)]
     public ActionResult RestartApplication()
     {
-        Task.Run(async () =>
-        {
-            await Task.Delay(100).ConfigureAwait(false);
-            _appHost.ShouldRestart = true;
-            _appHost.IsShuttingDown = true;
-            _hostApplicationLifetime.StopApplication();
-        });
+        _appHost.Restart();
         return NoContent();
     }
 
@@ -134,12 +122,7 @@ public class SystemController : BaseJellyfinApiController
     [ProducesResponseType(StatusCodes.Status403Forbidden)]
     public ActionResult ShutdownApplication()
     {
-        Task.Run(async () =>
-        {
-            await Task.Delay(100).ConfigureAwait(false);
-            _appHost.IsShuttingDown = true;
-            _hostApplicationLifetime.StopApplication();
-        });
+        _appHost.Shutdown();
         return NoContent();
     }
 

+ 14 - 4
MediaBrowser.Common/IApplicationHost.cs

@@ -41,15 +41,15 @@ namespace MediaBrowser.Common
         bool HasPendingRestart { get; }
 
         /// <summary>
-        /// Gets or sets a value indicating whether this instance is currently shutting down.
+        /// Gets a value indicating whether this instance is currently shutting down.
         /// </summary>
         /// <value><c>true</c> if this instance is shutting down; otherwise, <c>false</c>.</value>
-        bool IsShuttingDown { get; set; }
+        bool IsShuttingDown { get; }
 
         /// <summary>
-        /// Gets or sets a value indicating whether the application should restart.
+        /// Gets a value indicating whether the application should restart.
         /// </summary>
-        bool ShouldRestart { get; set; }
+        bool ShouldRestart { get; }
 
         /// <summary>
         /// Gets the application version.
@@ -91,6 +91,11 @@ namespace MediaBrowser.Common
         /// </summary>
         void NotifyPendingRestart();
 
+        /// <summary>
+        /// Restarts this instance.
+        /// </summary>
+        void Restart();
+
         /// <summary>
         /// Gets the exports.
         /// </summary>
@@ -122,6 +127,11 @@ namespace MediaBrowser.Common
         /// <returns>``0.</returns>
         T Resolve<T>();
 
+        /// <summary>
+        /// Shuts down.
+        /// </summary>
+        void Shutdown();
+
         /// <summary>
         /// Initializes this instance.
         /// </summary>