fix: changelog embarqué manquant, badge hors-ligne trompeur, installeur WireGuard

- CHANGELOG.md n'était pas empaqueté par PyInstaller (datas=[]) et son
  chemin, calculé depuis __file__, ne survivait pas à l'extraction
  onefile : la page « À propos » restait vide une fois compilée. Le
  fichier est désormais embarqué (--add-data) et son chemin bascule sur
  sys._MEIPASS en mode frozen.
- Le badge de latence se basait uniquement sur un ping ICMP vers
  l'endpoint : de nombreux serveurs/pare-feux le bloquent alors que le
  tunnel WireGuard fonctionne, d'où « hors ligne » permanent. Repli sur
  l'âge du dernier handshake réel quand l'ICMP échoue.
- wgsecure.iss installe désormais WireGuard for Windows en silencieux
  (prérequis manquant jusqu'ici), au même titre que le VC++
  Redistributable ; make installer-deps télécharge les deux binaires.
This commit is contained in:
2026-09-01 21:23:12 +02:00
parent 8c09c02362
commit ce4df4edb4
5 changed files with 99 additions and 12 deletions
+11 -3
View File
@@ -414,7 +414,7 @@ class MainWindow(QMainWindow):
return
# `ping` bloque jusqu'à 4 s : exécuté dans le thread Qt, il faisait
# saccader toute l'interface toutes les 10 secondes.
self._ping_worker = ValueWorker(wg_core.ping_server, host, 2, parent=self)
self._ping_worker = ValueWorker(wg_core.ping_or_handshake, self._cfg, 2, parent=self)
self._ping_worker.done.connect(self._on_ping_done)
# Détruire le QThread depuis `finished` et non depuis `done` : `done`
# est émis avant la sortie de run(), un deleteLater() à ce moment
@@ -422,12 +422,20 @@ class MainWindow(QMainWindow):
self._ping_worker.finished.connect(self._ping_worker.deleteLater)
self._ping_worker.start()
def _on_ping_done(self, ms):
def _on_ping_done(self, result):
self._ping_worker = None
ms, source = result if result else (None, "down")
if not self._is_connected:
self._set_ping_badge(None, "— ms", "offline")
elif ms is None:
elif source == "down":
self._set_ping_badge(None, "hors ligne", "bad")
elif source == "stale":
self._set_ping_badge(None, "handshake ancien", "bad")
elif source == "handshake":
# ICMP bloqué par le serveur/pare-feu mais handshake WireGuard
# récent : le tunnel fonctionne, la latence réelle est juste
# invisible depuis ce test.
self._set_ping_badge(None, f"actif ({ms}s)", "medium")
elif ms < 50:
self._set_ping_badge(ms, f"{ms} ms", "good")
elif ms < 200: