d845edb90f403f319b4f8eb8c8573e105f8531a0
Bug rapporté après v1.0.10 : client sur license channel=full avec les deux entries v1.5.4.32 dans le backoffice (Entry #1 tagged firefighter+full, Entry #2 tagged full), le launcher n'affichait toujours qu'une seule ligne. Root cause côté serveur, PAS côté client cette fois. Manifest.php faisait un « group by version + pick most specific » dans filterVersions() — comportement historique introduit pour ne pas faire crasher les vieux clients qui déduisaient par ToDictionary(v.Version). Résultat : Entry #2 était filtrée avant même d'atteindre le launcher. Ce filtrage était nécessaire à l'époque (vieux clients) mais bloque tous les fixes multi-channels client (v1.0.8-1.0.10) qui avaient rendu le client capable d'afficher plusieurs entries au même numéro. Fix : opt-in via query param sur /manifest?multiChannel=1 Server (Manifest.php) : • filterVersions() prend un `bool $multiChannel = false`. • Si true → skip group-by, retourne toutes les entries visibles. • Si false (défaut, vieux clients) → comportement historique préservé. • Query param `multiChannel` lu depuis $_GET, transmis à filterVersions. Client (ManifestService.FetchFromOvhAsync) : • Ajoute `?multiChannel=1` inconditionnellement. Un serveur ancien ignore silencieusement le param (pas de header d'échec). • Combiné avec &channel=X quand la license a un channel. Rétro-compat : • Vieux client (v1.0.9-) + serveur nouveau : n'envoie pas multiChannel=1, serveur dédupe comme avant, launcher ne crash pas. • Client nouveau (v1.0.11+) + serveur ancien : le param est ignoré, même comportement qu'avant (dédup côté serveur, une seule row visible). • Client nouveau + serveur nouveau (config voulue) : les deux entries remontent, le row-key-par-Id de v1.0.10 fait le reste. Bump : 1.0.10 → 1.0.11 (fix ciblé serveur+client). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PS_Launcher
Launcher Windows pour l'application UE5 PROSERVE : gère plusieurs versions cohabitantes, téléchargement et installation de nouvelles versions depuis un serveur, validation de license, release notes.
Composants
src/— Solution C# / .NET 8 / WPF (Visual Studio 2022 + SDK .NET 8 requis)PSLauncher.App: UI WPF (style Epic Games Launcher)PSLauncher.Core: services (Manifest, Download, Install, Process…)PSLauncher.Models: DTOs partagés
server/— Code serveur PHP 8 (à déployer souswww/PS_Launcher/sur OVH mutualisé)
Démarrage rapide (dev)
dotnet build PS_Launcher.sln
dotnet run --project src/PSLauncher.App
Pour produire un binaire autonome distribuable (un seul .exe ~70 Mo) :
dotnet publish src/PSLauncher.App -c Release
# Sortie : src/PSLauncher.App/bin/Release/net8.0-windows/win-x64/publish/PSLauncher.exe
Configuration locale
Le launcher écrit sa config dans %LocalAppData%\PSLauncher\config.json au premier lancement.
Édite serverBaseUrl pour pointer vers ton serveur :
{
"serverBaseUrl": "https://ton-domaine.com/PS_Launcher/api",
"installRoot": "C:\\ASTERION\\GIT\\PS_Launcher\\ASTERION_VR"
}
État (roadmap)
- ✅ v0.1 — Scan + lancement de versions installées
- ✅ v0.2 — Manifest distant, download ZIP, install cohabitante, release notes Markdown
- ⏳ v0.3 — Reprise (HTTP Range), retry Polly, state.json
- ⏳ v0.4 — License (MySQL + Ed25519 + DPAPI)
- ⏳ v0.5 — Settings, suppression manuelle versions, toasts
- ⏳ v1.0 — Auto-update launcher, MSI installer
Voir le plan détaillé pour la roadmap complète.
Licence / interne
Repo interne ASTERION. Ne pas distribuer.
Description
Languages
C#
46%
HTML
29%
PHP
23.3%
CSS
0.6%
Batchfile
0.5%
Other
0.6%