2026-04-21 20:59:52 +08:00
|
|
|
using System.Text.Json;
|
|
|
|
|
using System.Text.Json.Serialization;
|
|
|
|
|
using LanMountainDesktop.Launcher.Models;
|
|
|
|
|
using LanMountainDesktop.Launcher.Services;
|
|
|
|
|
using LanMountainDesktop.Shared.Contracts.Launcher;
|
2026-04-23 09:45:05 +08:00
|
|
|
using LanMountainDesktop.Shared.IPC.Abstractions.Services;
|
2026-04-21 20:59:52 +08:00
|
|
|
|
|
|
|
|
namespace LanMountainDesktop.Launcher;
|
|
|
|
|
|
2026-04-22 07:31:54 +08:00
|
|
|
[JsonSourceGenerationOptions(
|
|
|
|
|
WriteIndented = true,
|
|
|
|
|
PropertyNamingPolicy = JsonKnownNamingPolicy.CamelCase,
|
|
|
|
|
PropertyNameCaseInsensitive = true)]
|
2026-04-21 20:59:52 +08:00
|
|
|
[JsonSerializable(typeof(SignedFileMap))]
|
|
|
|
|
[JsonSerializable(typeof(UpdateFileEntry))]
|
|
|
|
|
[JsonSerializable(typeof(PlondsUpdateMetadata))]
|
|
|
|
|
[JsonSerializable(typeof(PlondsFileMap))]
|
|
|
|
|
[JsonSerializable(typeof(PlondsComponentEntry))]
|
|
|
|
|
[JsonSerializable(typeof(PlondsFileEntry))]
|
|
|
|
|
[JsonSerializable(typeof(PlondsHashDescriptor))]
|
|
|
|
|
[JsonSerializable(typeof(SnapshotMetadata))]
|
|
|
|
|
[JsonSerializable(typeof(AppVersionInfo))]
|
|
|
|
|
[JsonSerializable(typeof(StartupProgressMessage))]
|
2026-04-23 09:45:05 +08:00
|
|
|
[JsonSerializable(typeof(LauncherCoordinatorRequest))]
|
|
|
|
|
[JsonSerializable(typeof(LauncherCoordinatorResponse))]
|
|
|
|
|
[JsonSerializable(typeof(LauncherCoordinatorStatus))]
|
|
|
|
|
[JsonSerializable(typeof(PublicShellStatus))]
|
|
|
|
|
[JsonSerializable(typeof(PublicTrayStatus))]
|
|
|
|
|
[JsonSerializable(typeof(PublicTaskbarStatus))]
|
|
|
|
|
[JsonSerializable(typeof(PublicShellActivationResult))]
|
2026-04-21 20:59:52 +08:00
|
|
|
[JsonSerializable(typeof(LauncherResult))]
|
|
|
|
|
[JsonSerializable(typeof(HostDiscoveryConfig))]
|
|
|
|
|
[JsonSerializable(typeof(PluginManifest))]
|
|
|
|
|
[JsonSerializable(typeof(PendingUpgrade))]
|
|
|
|
|
[JsonSerializable(typeof(List<PendingUpgrade>))]
|
Harden OOBE, launch-source and elevation flow
Introduce a per-user OOBE state model and hardened launch/elevation handling. Adds OobeStateFile/OobeLaunchDecision models, OobeStateService (persisting %LOCALAPPDATA%/.launcher/state/oobe-state.json), and LauncherExecutionContext to capture elevation and user SID. CommandContext now normalizes/infers launch-source values (normal, postinstall, apply-update, plugin-install, debug-preview) and exposes maintenance checks. LauncherFlowCoordinator propagates richer launcher context details for diagnostics and suppresses OOBE for elevated/maintenance contexts. PluginInstallerService avoids requesting elevation for user-scoped installs and returns a clear error when installation target is outside the current user's LocalAppData. LauncherClient maps and surfaces result codes, UpdateWorkflow and installer invocation now pass explicit --launch-source values, and WelcomeOobeStep persists OOBE completion via the new service. Adds unit tests (CommandContext, OobeStateService, PluginInstallerService), docs/specs/checklists for the contract, and makes internals visible to tests.
2026-04-22 09:25:22 +08:00
|
|
|
[JsonSerializable(typeof(OobeStateFile))]
|
2026-04-21 20:59:52 +08:00
|
|
|
[JsonSerializable(typeof(GitHubRelease))]
|
|
|
|
|
[JsonSerializable(typeof(GitHubAsset))]
|
|
|
|
|
[JsonSerializable(typeof(List<GitHubRelease>))]
|
|
|
|
|
internal sealed partial class AppJsonContext : JsonSerializerContext;
|