New row between top bar and content showing pill-shaped status indicators for the system dependencies that PROSERVE needs (SteamVR, Vive Business Streaming process, VR headset reachable on the network, etc.). Each pill is colored : 🟢 OK, 🟠 limitation détectée (e.g. ping élevé), 🔴 KO, gris = non configuré. Hover → tooltip with full check kind, target, last RTT/process count and timestamp. Architecture - LocalConfig.HealthChecksConfig : list of HealthCheckEntry (Kind=Ping or Process, Target=IP/host or process name, ping thresholds in ms, refresh interval in s). - ISystemHealthService + SystemHealthService : ping via System.Net.NetworkInformation.Ping (no admin required), process lookup via System.Diagnostics.Process.GetProcessesByName. Returns HealthResult { Severity, Detail }. - HealthIndicatorViewModel : observable wrapper per entry with Severity-driven Brushes (background pill, border, icon colour) and composed Tooltip text. - MainViewModel.InitHealthIndicators + StartHealthLoop : populates ObservableCollection<HealthIndicatorViewModel> from config and runs parallel checks every RefreshIntervalSeconds (default 10s). - MainWindow.xaml : new Row 1 (between top bar and body) hosting an ItemsControl bound to HealthIndicators. Row collapses cleanly if the list is empty (HasHealthIndicators=false). Defaults shipped (all editable in %LocalAppData%\PSLauncher\config.json) - 🎮 SteamVR (Process : vrserver) - 📡 Vive Business Streaming (Process : HtcConnectionUtility) - 🥽 Casque VR (Ping : empty, user fills in the headset IP) The Settings UI editor for managing the list is intentionally deferred to a future iteration — config.json edit is enough to start using it. Versions bumped to 0.21.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
41 lines
1.7 KiB
XML
41 lines
1.7 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<OutputType>WinExe</OutputType>
|
|
<TargetFramework>net8.0-windows</TargetFramework>
|
|
<Nullable>enable</Nullable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<LangVersion>latest</LangVersion>
|
|
<AssemblyName>PS_Launcher.Updater</AssemblyName>
|
|
<RootNamespace>PSLauncher.Updater</RootNamespace>
|
|
<Version>0.21.0</Version>
|
|
<ApplicationIcon>..\PSLauncher.App\Resources\favicon.ico</ApplicationIcon>
|
|
<Company>ASTERION VR</Company>
|
|
<Copyright>© 2026 ASTERION VR — All rights reserved</Copyright>
|
|
|
|
<!-- Single-file self-contained pour le publish (~10 Mo) -->
|
|
<PublishSingleFile>true</PublishSingleFile>
|
|
<SelfContained>true</SelfContained>
|
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
|
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
|
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
|
|
<PublishTrimmed>false</PublishTrimmed>
|
|
</PropertyGroup>
|
|
|
|
<!-- Copie automatique du single-file Updater à la racine du repo après chaque
|
|
`dotnet publish -c Release`. -->
|
|
<Target Name="CopyPublishedToRepoRoot" AfterTargets="Publish"
|
|
Condition=" '$(Configuration)' == 'Release' ">
|
|
<PropertyGroup>
|
|
<RepoRoot>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\'))</RepoRoot>
|
|
</PropertyGroup>
|
|
<Copy SourceFiles="$(PublishDir)$(AssemblyName).exe"
|
|
DestinationFolder="$(RepoRoot)"
|
|
SkipUnchangedFiles="false"
|
|
OverwriteReadOnlyFiles="true"
|
|
ContinueOnError="WarnAndContinue" />
|
|
<Message Importance="high" Text="Copied $(AssemblyName).exe to $(RepoRoot)" />
|
|
</Target>
|
|
|
|
</Project>
|