SystemManager.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Jellyfin.Server.Implementations.StorageHelpers;
  5. using MediaBrowser.Common.Configuration;
  6. using MediaBrowser.Common.Updates;
  7. using MediaBrowser.Controller;
  8. using MediaBrowser.Controller.Configuration;
  9. using MediaBrowser.Controller.Library;
  10. using MediaBrowser.Model.System;
  11. using Microsoft.AspNetCore.Http;
  12. using Microsoft.Extensions.Hosting;
  13. namespace Emby.Server.Implementations;
  14. /// <inheritdoc />
  15. public class SystemManager : ISystemManager
  16. {
  17. private readonly IHostApplicationLifetime _applicationLifetime;
  18. private readonly IServerApplicationHost _applicationHost;
  19. private readonly IServerApplicationPaths _applicationPaths;
  20. private readonly IServerConfigurationManager _configurationManager;
  21. private readonly IStartupOptions _startupOptions;
  22. private readonly IInstallationManager _installationManager;
  23. private readonly ILibraryManager _libraryManager;
  24. /// <summary>
  25. /// Initializes a new instance of the <see cref="SystemManager"/> class.
  26. /// </summary>
  27. /// <param name="applicationLifetime">Instance of <see cref="IHostApplicationLifetime"/>.</param>
  28. /// <param name="applicationHost">Instance of <see cref="IServerApplicationHost"/>.</param>
  29. /// <param name="applicationPaths">Instance of <see cref="IServerApplicationPaths"/>.</param>
  30. /// <param name="configurationManager">Instance of <see cref="IServerConfigurationManager"/>.</param>
  31. /// <param name="startupOptions">Instance of <see cref="IStartupOptions"/>.</param>
  32. /// <param name="installationManager">Instance of <see cref="IInstallationManager"/>.</param>
  33. /// <param name="libraryManager">Instance of <see cref="ILibraryManager"/>.</param>
  34. public SystemManager(
  35. IHostApplicationLifetime applicationLifetime,
  36. IServerApplicationHost applicationHost,
  37. IServerApplicationPaths applicationPaths,
  38. IServerConfigurationManager configurationManager,
  39. IStartupOptions startupOptions,
  40. IInstallationManager installationManager,
  41. ILibraryManager libraryManager)
  42. {
  43. _applicationLifetime = applicationLifetime;
  44. _applicationHost = applicationHost;
  45. _applicationPaths = applicationPaths;
  46. _configurationManager = configurationManager;
  47. _startupOptions = startupOptions;
  48. _installationManager = installationManager;
  49. _libraryManager = libraryManager;
  50. }
  51. /// <inheritdoc />
  52. public SystemInfo GetSystemInfo(HttpRequest request)
  53. {
  54. return new SystemInfo
  55. {
  56. HasPendingRestart = _applicationHost.HasPendingRestart,
  57. IsShuttingDown = _applicationLifetime.ApplicationStopping.IsCancellationRequested,
  58. Version = _applicationHost.ApplicationVersionString,
  59. ProductName = _applicationHost.Name,
  60. WebSocketPortNumber = _applicationHost.HttpPort,
  61. CompletedInstallations = _installationManager.CompletedInstallations.ToArray(),
  62. Id = _applicationHost.SystemId,
  63. #pragma warning disable CS0618 // Type or member is obsolete
  64. ProgramDataPath = _applicationPaths.ProgramDataPath,
  65. WebPath = _applicationPaths.WebPath,
  66. LogPath = _applicationPaths.LogDirectoryPath,
  67. ItemsByNamePath = _applicationPaths.InternalMetadataPath,
  68. InternalMetadataPath = _applicationPaths.InternalMetadataPath,
  69. CachePath = _applicationPaths.CachePath,
  70. TranscodingTempPath = _configurationManager.GetTranscodePath(),
  71. #pragma warning restore CS0618 // Type or member is obsolete
  72. ServerName = _applicationHost.FriendlyName,
  73. LocalAddress = _applicationHost.GetSmartApiUrl(request),
  74. StartupWizardCompleted = _configurationManager.CommonConfiguration.IsStartupWizardCompleted,
  75. SupportsLibraryMonitor = true,
  76. PackageName = _startupOptions.PackageName,
  77. CastReceiverApplications = _configurationManager.Configuration.CastReceiverApplications
  78. };
  79. }
  80. /// <inheritdoc/>
  81. public SystemStorageInfo GetSystemStorageInfo()
  82. {
  83. var virtualFolderInfos = _libraryManager.GetVirtualFolders().Select(e => new LibraryStorageInfo()
  84. {
  85. Id = Guid.Parse(e.ItemId),
  86. Name = e.Name,
  87. Folders = e.Locations.Select(f => StorageHelper.GetFreeSpaceOf(f)).ToArray()
  88. });
  89. return new SystemStorageInfo()
  90. {
  91. ProgramDataFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.ProgramDataPath),
  92. WebFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.WebPath),
  93. LogFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.LogDirectoryPath),
  94. ImageCacheFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.ImageCachePath),
  95. InternalMetadataFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.InternalMetadataPath),
  96. CacheFolder = StorageHelper.GetFreeSpaceOf(_applicationPaths.CachePath),
  97. TranscodingTempFolder = StorageHelper.GetFreeSpaceOf(_configurationManager.GetTranscodePath()),
  98. Libraries = virtualFolderInfos.ToArray()
  99. };
  100. }
  101. /// <inheritdoc />
  102. public PublicSystemInfo GetPublicSystemInfo(HttpRequest request)
  103. {
  104. return new PublicSystemInfo
  105. {
  106. Version = _applicationHost.ApplicationVersionString,
  107. ProductName = _applicationHost.Name,
  108. Id = _applicationHost.SystemId,
  109. ServerName = _applicationHost.FriendlyName,
  110. LocalAddress = _applicationHost.GetSmartApiUrl(request),
  111. StartupWizardCompleted = _configurationManager.CommonConfiguration.IsStartupWizardCompleted
  112. };
  113. }
  114. /// <inheritdoc />
  115. public void Restart() => ShutdownInternal(true);
  116. /// <inheritdoc />
  117. public void Shutdown() => ShutdownInternal(false);
  118. private void ShutdownInternal(bool restart)
  119. {
  120. Task.Run(async () =>
  121. {
  122. await Task.Delay(100).ConfigureAwait(false);
  123. _applicationHost.ShouldRestart = restart;
  124. _applicationLifetime.StopApplication();
  125. });
  126. }
  127. }