mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
Introduce a persistent LauncherDebugSettingsStore and wire it into ErrorWindow and SplashWindow so dev-mode and custom host path can be saved/loaded. Harden DeploymentLocator/FlexibleHostLocator to safely normalize and validate saved debug paths and log warnings for malformed values. Add a WaitingForShell startup state and recoverable-activation logic across App and LauncherFlowCoordinator (with registry updates) so Launcher can attach to an in-progress desktop shell rather than failing. Clean up ErrorDebugWindow UI/flow (WasAccepted flag, localization fixes, event wiring) and improve splash version population. Improve AppVersionProvider to trim surrounding quotes, robustly parse version.json via JsonDocument and read string properties; add unit tests for AppVersionProvider, DeploymentLocator and LauncherDebugSettingsStore. Also quote Exec commands in the csproj and harden scripts/Generate-VersionFile.ps1 (argument normalization, LiteralPath, error handling).
66 lines
2.0 KiB
C#
66 lines
2.0 KiB
C#
using System.Text.Json.Serialization;
|
|
using LanMountainDesktop.Shared.Contracts.Launcher;
|
|
|
|
namespace LanMountainDesktop.Launcher.Models;
|
|
|
|
internal enum StartupAttemptState
|
|
{
|
|
Pending,
|
|
SoftTimeout,
|
|
DetachedWaiting,
|
|
Succeeded,
|
|
Failed,
|
|
WaitingForShell
|
|
}
|
|
|
|
internal sealed class StartupAttemptRecord
|
|
{
|
|
[JsonPropertyName("attemptId")]
|
|
public string AttemptId { get; set; } = Guid.NewGuid().ToString("N");
|
|
|
|
[JsonPropertyName("hostPid")]
|
|
public int HostPid { get; set; }
|
|
|
|
[JsonPropertyName("coordinatorPid")]
|
|
public int CoordinatorPid { get; set; }
|
|
|
|
[JsonPropertyName("coordinatorPipeName")]
|
|
public string CoordinatorPipeName { get; set; } = string.Empty;
|
|
|
|
[JsonPropertyName("startedAtUtc")]
|
|
public DateTimeOffset StartedAtUtc { get; set; } = DateTimeOffset.UtcNow;
|
|
|
|
[JsonPropertyName("updatedAtUtc")]
|
|
public DateTimeOffset UpdatedAtUtc { get; set; } = DateTimeOffset.UtcNow;
|
|
|
|
[JsonPropertyName("heartbeatAtUtc")]
|
|
public DateTimeOffset HeartbeatAtUtc { get; set; } = DateTimeOffset.UtcNow;
|
|
|
|
[JsonPropertyName("launchSource")]
|
|
public string LaunchSource { get; set; } = string.Empty;
|
|
|
|
[JsonPropertyName("successPolicy")]
|
|
public string SuccessPolicy { get; set; } = string.Empty;
|
|
|
|
[JsonPropertyName("lastObservedStage")]
|
|
public StartupStage LastObservedStage { get; set; } = StartupStage.Initializing;
|
|
|
|
[JsonPropertyName("lastObservedMessage")]
|
|
public string LastObservedMessage { get; set; } = string.Empty;
|
|
|
|
[JsonPropertyName("ipcConnected")]
|
|
public bool IpcConnected { get; set; }
|
|
|
|
[JsonPropertyName("publicIpcConnected")]
|
|
public bool PublicIpcConnected { get; set; }
|
|
|
|
[JsonPropertyName("shellStatus")]
|
|
public string ShellStatus { get; set; } = string.Empty;
|
|
|
|
[JsonPropertyName("reservedBeforeHostStart")]
|
|
public bool ReservedBeforeHostStart { get; set; }
|
|
|
|
[JsonPropertyName("state")]
|
|
public StartupAttemptState State { get; set; } = StartupAttemptState.Pending;
|
|
}
|