diff options
Diffstat (limited to 'MediaBrowser.Common')
| -rw-r--r-- | MediaBrowser.Common/Extensions/ProcessExtensions.cs | 60 | ||||
| -rw-r--r-- | MediaBrowser.Common/IApplicationHost.cs | 24 | ||||
| -rw-r--r-- | MediaBrowser.Common/MediaBrowser.Common.csproj | 10 | ||||
| -rw-r--r-- | MediaBrowser.Common/Plugins/IPluginServiceRegistrator.cs | 19 |
4 files changed, 13 insertions, 100 deletions
diff --git a/MediaBrowser.Common/Extensions/ProcessExtensions.cs b/MediaBrowser.Common/Extensions/ProcessExtensions.cs index c3a7cb394..bb8ab130d 100644 --- a/MediaBrowser.Common/Extensions/ProcessExtensions.cs +++ b/MediaBrowser.Common/Extensions/ProcessExtensions.cs @@ -15,65 +15,13 @@ namespace MediaBrowser.Common.Extensions /// </summary> /// <param name="process">The process to wait for.</param> /// <param name="timeout">The duration to wait before cancelling waiting for the task.</param> - /// <returns>True if the task exited normally, false if the timeout elapsed before the process exited.</returns> - /// <exception cref="InvalidOperationException">If <see cref="Process.EnableRaisingEvents"/> is not set to true for the process.</exception> - public static async Task<bool> WaitForExitAsync(this Process process, TimeSpan timeout) + /// <returns>A task that will complete when the process has exited, cancellation has been requested, or an error occurs.</returns> + /// <exception cref="OperationCanceledException">The timeout ended.</exception> + public static async Task WaitForExitAsync(this Process process, TimeSpan timeout) { using (var cancelTokenSource = new CancellationTokenSource(timeout)) { - return await WaitForExitAsync(process, cancelTokenSource.Token).ConfigureAwait(false); - } - } - - /// <summary> - /// Asynchronously wait for the process to exit. - /// </summary> - /// <param name="process">The process to wait for.</param> - /// <param name="cancelToken">A <see cref="CancellationToken"/> to observe while waiting for the process to exit.</param> - /// <returns>True if the task exited normally, false if cancelled before the process exited.</returns> - public static async Task<bool> WaitForExitAsync(this Process process, CancellationToken cancelToken) - { - if (!process.EnableRaisingEvents) - { - throw new InvalidOperationException("EnableRisingEvents must be enabled to async wait for a task to exit."); - } - - // Add an event handler for the process exit event - var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously); - process.Exited += (_, _) => tcs.TrySetResult(true); - - // Return immediately if the process has already exited - if (process.HasExitedSafe()) - { - return true; - } - - // Register with the cancellation token then await - using (var cancelRegistration = cancelToken.Register(() => tcs.TrySetResult(process.HasExitedSafe()))) - { - return await tcs.Task.ConfigureAwait(false); - } - } - - /// <summary> - /// Gets a value indicating whether the associated process has been terminated using - /// <see cref="Process.HasExited"/>. This is safe to call even if there is no operating system process - /// associated with the <see cref="Process"/>. - /// </summary> - /// <param name="process">The process to check the exit status for.</param> - /// <returns> - /// True if the operating system process referenced by the <see cref="Process"/> component has - /// terminated, or if there is no associated operating system process; otherwise, false. - /// </returns> - private static bool HasExitedSafe(this Process process) - { - try - { - return process.HasExited; - } - catch (InvalidOperationException) - { - return true; + await process.WaitForExitAsync(cancelTokenSource.Token).ConfigureAwait(false); } } } diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 5985d3dd8..23795c6be 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -35,21 +35,15 @@ namespace MediaBrowser.Common string SystemId { get; } /// <summary> - /// Gets a value indicating whether this instance has pending kernel reload. + /// Gets a value indicating whether this instance has pending changes requiring a restart. /// </summary> - /// <value><c>true</c> if this instance has pending kernel reload; otherwise, <c>false</c>.</value> + /// <value><c>true</c> if this instance has a pending restart; otherwise, <c>false</c>.</value> bool HasPendingRestart { get; } /// <summary> - /// Gets a value indicating whether this instance is currently shutting down. + /// Gets or sets a value indicating whether the application should restart. /// </summary> - /// <value><c>true</c> if this instance is shutting down; otherwise, <c>false</c>.</value> - bool IsShuttingDown { get; } - - /// <summary> - /// Gets a value indicating whether the application should restart. - /// </summary> - bool ShouldRestart { get; } + bool ShouldRestart { get; set; } /// <summary> /// Gets the application version. @@ -92,11 +86,6 @@ namespace MediaBrowser.Common void NotifyPendingRestart(); /// <summary> - /// Restarts this instance. - /// </summary> - void Restart(); - - /// <summary> /// Gets the exports. /// </summary> /// <typeparam name="T">The type.</typeparam> @@ -128,11 +117,6 @@ namespace MediaBrowser.Common T Resolve<T>(); /// <summary> - /// Shuts down. - /// </summary> - void Shutdown(); - - /// <summary> /// Initializes this instance. /// </summary> /// <param name="serviceCollection">Instance of the <see cref="IServiceCollection"/> interface.</param> diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 3f1a098e4..7d0d7a173 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -38,17 +38,17 @@ <SymbolPackageFormat>snupkg</SymbolPackageFormat> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> - <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors> - </PropertyGroup> - <PropertyGroup Condition=" '$(Stability)'=='Unstable'"> <!-- Include all symbols in the main nupkg until Azure Artifact Feed starts supporting ingesting NuGet symbol packages. --> <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder> </PropertyGroup> - <!-- Code analyzers--> + <!-- Code Analyzers --> <ItemGroup Condition=" '$(Configuration)' == 'Debug' "> + <PackageReference Include="IDisposableAnalyzers"> + <PrivateAssets>all</PrivateAssets> + <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> + </PackageReference> <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> diff --git a/MediaBrowser.Common/Plugins/IPluginServiceRegistrator.cs b/MediaBrowser.Common/Plugins/IPluginServiceRegistrator.cs deleted file mode 100644 index 3afe874c5..000000000 --- a/MediaBrowser.Common/Plugins/IPluginServiceRegistrator.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace MediaBrowser.Common.Plugins -{ - using Microsoft.Extensions.DependencyInjection; - - /// <summary> - /// Defines the <see cref="IPluginServiceRegistrator" />. - /// </summary> - public interface IPluginServiceRegistrator - { - /// <summary> - /// Registers the plugin's services with the service collection. - /// </summary> - /// <remarks> - /// This interface is only used for service registration and requires a parameterless constructor. - /// </remarks> - /// <param name="serviceCollection">The service collection.</param> - void RegisterServices(IServiceCollection serviceCollection); - } -} |
