mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
51 lines
1.8 KiB
C#
51 lines
1.8 KiB
C#
using LanMountainDesktop.Shared.Contracts.Launcher;
|
|
using LanMountainDesktop.Shared.IPC.Abstractions.Services;
|
|
|
|
namespace LanMountainDesktop.Launcher.Startup;
|
|
|
|
internal static class HostActivationPolicy
|
|
{
|
|
internal static bool ShouldProbeExistingHostBeforeLaunch(CommandContext context)
|
|
{
|
|
if (!string.Equals(context.Command, "launch", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (context.IsPreviewCommand || context.IsMaintenanceCommand)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return !string.Equals(context.LaunchSource, "restart", StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
internal static bool IsExistingHostReadyForLauncherDecision(PublicShellStatus? status) =>
|
|
status is { PublicIpcReady: true, ProcessId: > 0 };
|
|
|
|
internal static bool IsRecoverableActivationFailure(PublicShellActivationResult activation)
|
|
{
|
|
if (activation.Accepted)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (string.Equals(activation.Code, "shutdown_in_progress", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return activation.Status.PublicIpcReady &&
|
|
(!activation.Status.MainWindowOpened ||
|
|
!activation.Status.DesktopVisible ||
|
|
string.Equals(activation.Code, "shell_not_ready", StringComparison.OrdinalIgnoreCase) ||
|
|
string.Equals(activation.Code, "startup_pending", StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
internal static bool IsSuccessfulActivationExitCode(int exitCode) =>
|
|
exitCode == HostExitCodes.SecondaryActivationSucceeded;
|
|
|
|
internal static bool IsFailedActivationExitCode(int exitCode) =>
|
|
exitCode is HostExitCodes.SecondaryActivationFailed or HostExitCodes.RestartLockNotAcquired;
|
|
}
|