Skip to content

feat: migration WinUI 3 — async ApiClient, MVVM, WebView2 console - #1

Merged
Kofysh merged 22 commits into
masterfrom
feature/winui3-migration
Jun 4, 2026
Merged

feat: migration WinUI 3 — async ApiClient, MVVM, WebView2 console#1
Kofysh merged 22 commits into
masterfrom
feature/winui3-migration

Conversation

@Kofysh

@Kofysh Kofysh commented Jun 4, 2026

Copy link
Copy Markdown
Owner

Migration WinUI 3

Refonte complète du client Proxmox Desktop : abandon de WinForms au profit de WinUI 3 (Windows App SDK), avec une architecture MVVM propre et un ApiClient entièrement asynchrone.


🔧 Problèmes corrigés

Problème (ancienne app) Solution
GetAwaiter().GetResult() — freeze UI à chaque appel réseau Toutes les méthodes sont maintenant async/await natif
dynamic + Newtonsoft.Json System.Text.Json avec DTOs typés, zéro dépendance externe
Mot de passe stocké en mémoire après login DataTicket ne conserve que le ticket PVE + CSRF
Configurations.Save() à chaque SetSetting() ConfigurationService : sauvegarde uniquement sur Save() explicite
Tiles recréées entièrement à chaque refresh Diff partiel sur ObservableCollection<MachineData>
pMenuItem8 (Reset) jamais ajouté au menu Corrigé dans MachineCard.xaml (tous les items présents)
MessageBox.Show() dans la logique métier LoginResult / PowerResult typés — la View gère l'affichage

✨ Nouveautés

  • Barres CPU % et RAM % sur chaque tile (ProgressBar)
  • Recherche en temps réel des VMs par nom, VMID ou node
  • Requêtes parallèles par nœud via Task.WhenAll() (plus rapide sur multi-node)
  • Console WebView2 intégrée pour NoVNC et xTermJS (plus de navigateur externe)
  • Renouvellement de ticket via PeriodicTimer (toutes les 90 min) sans bloquer l'UI
  • CI GitHub Actions : build automatique sur push + PR

📁 Structure

src/
├── ProxmoxDesktop.sln
├── ProxmoxDesktop.Core/          ← Logique métier pure (no UI)
│   ├── Api/
│   │   ├── ApiClient.cs          ← HTTP async, System.Text.Json
│   │   ├── Models/               ← MachineData, RealmData, SpiceObject...
│   │   └── Internal/             ← DTOs internes PveResponse<T>
│   ├── Config/ConfigurationService.cs
│   └── Console/SpiceLauncher.cs
└── ProxmoxDesktop.App/           ← WinUI 3
    ├── Views/                    ← LoginPage, MainPage, ConsolePage
    ├── ViewModels/               ← LoginViewModel, MainViewModel (MVVM Toolkit)
    ├── Controls/MachineCard.xaml ← Tile VM/LXC avec menu contextuel complet
    ├── Converters/
    ├── Helpers/
    └── Assets/                   ← Copier via scripts/copy-assets.ps1

scripts/
├── copy-assets.ps1   ← Copie Resources/ → Assets/ (Windows)
└── copy-assets.sh    ← Copie Resources/ → Assets/ (Linux/WSL)

🚀 Build local

git checkout feature/winui3-migration
.\scripts\copy-assets.ps1
dotnet build src/ProxmoxDesktop.sln

⚠️ À faire avant merge

  • Tester le login sur un vrai Proxmox VE
  • Vérifier les consoles NoVNC et xTermJS via WebView2
  • Tester SPICE avec virt-viewer
  • Valider le flow TOTP
  • Supprimer l'ancienne app WinForms ou la garder en parallèle ?

Kofysh added 22 commits June 4, 2026 18:13
…MTK0045), OneTime sur StatusBrush/MachineIcon (WMC1506)
Add numerous generated build outputs (bin/obj) for ProxmoxDesktop.App and ProxmoxDesktop.Core — DLLs, PDBs, deps/runtime files, XBF/XAML artifacts, projection assemblies and runtime natives — plus assets (proxmox.png, vm.png, lxc.png, app.ico), an Assets README and a .gitkeep. These are compiled/debug artifacts and copied resources; they are typically excluded from source control. Consider removing these files from the repository and updating .gitignore or using an artifact/storage solution to keep the repo clean.
@Kofysh
Kofysh merged commit 7474d93 into master Jun 4, 2026
1 check passed
@Kofysh
Kofysh deleted the feature/winui3-migration branch June 4, 2026 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant