22bb66b680
Statut serveur :
- SERVER_URL utilisait "localhost", que le Node embarqué par Electron peut
résoudre en IPv6 (::1) en priorité ; le serveur n'écoutant qu'en IPv4
(host: 0.0.0.0), le ping de statut échouait silencieusement alors que le
serveur tournait. Bascule sur 127.0.0.1 (main.js + preload.js).
- L'erreur réelle de pingServer() n'était jamais remontée au renderer
(health.error perdu) ; elle est maintenant incluse dans la réponse IPC.
URL/QR code clients :
- L'URL affichée utilisait un remplacement de chaîne ("localhost" -> IP) qui
ne matchait plus rien depuis le passage à 127.0.0.1 ; remplacé par un
parsing d'URL qui ne réutilise que le protocole/port.
- Le QR code dépendait d'une lib chargée depuis un CDN externe, inadapté à
une app self-hosted censée fonctionner sans accès Internet sur le WiFi
d'un événement. Généré désormais côté Main Process avec la lib qrcode
(déjà en dépendance, jamais utilisée) et transmis au renderer en data URL ;
suppression du fichier placeholder et de la dépendance CDN.
- getNetworkIP() lisait /admin/config, qui renvoie la valeur YAML brute
"AUTO" (jamais résolue), donc retombait toujours sur "localhost".
Remplacé par la détection réseau du Main Process (même logique que pour
les certificats mkcert).
- Ajout d'un placeholder visuel (icône + message) tant qu'aucun QR code
n'est généré ou que le serveur est arrêté, en CSS pur.
PTT Live Desktop
Application desktop Electron pour gérer le serveur PTT Live.
🚀 Démarrage
# Depuis la racine du projet
./start-desktop.sh
# OU depuis electron/
cd electron
npm start
📦 Build pour distribution
cd electron
# macOS
npm run build:mac
# Linux
npm run build:linux
# Les deux
npm run build
Les builds seront dans electron/dist/.
🎨 Fonctionnalités
Dashboard
- ✅ Stats temps réel (uptime, utilisateurs, connexions)
- ✅ Liste utilisateurs connectés
- ✅ QR Code pour connexion rapide clients
- ✅ Contrôles démarrage/arrêt serveur
Configuration
- ✅ Sélection périphériques audio (input/output)
- ✅ Paramètres audio (sample rate, bitrate, jitter buffer)
- ✅ Sauvegarde automatique dans config.yaml
Groupes
- ✅ Liste groupes configurés
- ✅ Ajout/modification/suppression groupes
- ✅ Configuration bitrate par groupe
Monitoring
- 🚧 VU-mètres temps réel (WebSocket)
- 🚧 Graphiques latence
- 🚧 Stats réseau par client
Logs
- ✅ Logs serveur en temps réel
- ✅ Filtrage par niveau (error/warn/info/debug)
- ✅ Export logs
🏗️ Architecture
electron/
├── main.js # Main Process (Node.js)
│ # - Spawn serveur PTT Live
│ # - IPC avec renderer
│ # - Gestion tray icon
│
├── preload.js # Bridge sécurisé IPC
│
└── ui/ # Renderer Process (Frontend)
├── index.html # Interface dashboard
├── styles.css # Styles
└── app.js # Logic frontend
# - Consomme API admin (/admin/*)
# - Met à jour UI
🔌 Communication
┌─────────────────────────────────────────┐
│ MAIN PROCESS (Node.js) │
│ ┌──────────────────────────────────┐ │
│ │ Serveur PTT Live (spawn) │ │
│ │ - LiveKit Server │ │
│ │ - Audio Bridge │ │
│ │ - API REST :3000 │ │
│ └──────────────────────────────────┘ │
│ ↕ IPC │
│ ┌──────────────────────────────────┐ │
│ │ Electron Window │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
↕ HTTP
┌─────────────────────────────────────────┐
│ RENDERER PROCESS (Frontend) │
│ - Fetch API admin │
│ - WebSocket audio levels │
│ - Interface dashboard │
└─────────────────────────────────────────┘
🛠️ API Utilisées
Toutes les routes de l'API admin serveur :
GET /admin/stats → Dashboard metrics
GET /admin/users → Utilisateurs connectés
GET /admin/groups → Liste groupes
POST /admin/groups → Créer groupe
PUT /admin/groups/:id → Modifier groupe
DELETE /admin/groups/:id → Supprimer groupe
GET /admin/config → Config complète
PUT /admin/config/audio → Mettre à jour config audio
GET /admin/audio/devices → Énumérer devices
POST /admin/audio/device → Sélectionner device
GET /admin/audio/routing → Config routing
POST /admin/audio/routing → Mettre à jour routing
GET /admin/devices/list → Auto-détection devices
GET /admin/logs → Logs serveur
WS /audio-levels → WebSocket VU-mètres
🔧 TODO
- Implémenter QR Code canvas (bibliothèque qrcode.js)
- WebSocket audio levels pour VU-mètres
- Notifications desktop (toast)
- Tray icon avec vraie icône
- Graphiques monitoring (Chart.js)
- Export logs (CSV/JSON)
- Auth admin (optionnel)
- Thème dark/light toggle
- Auto-update (electron-updater)
📝 Notes de développement
- Main Process : Gère le cycle de vie de l'app et spawn le serveur
- Renderer Process : Interface web, appelle l'API REST du serveur
- IPC : Communication sécurisée via contextBridge
- Serveur : Tourne dans un process child_process, logs transmis au renderer
- Port : 3000 par défaut (configurable via PORT env)
🐛 Debug
Ouvrir DevTools : automatique en mode --dev
npm run dev
Logs dans la console :
[Serveur]: logs du serveur PTT Live[Serveur Error]: erreurs serveur✅/❌: statut démarrage/arrêt
📦 Packaging
electron-builder crée :
- macOS :
.dmg+.appdansdist/mac/ - Linux :
.deb+.AppImagedansdist/
Tester le build :
npm run build:mac
open dist/mac/PTT\ Live\ Server.app