feat: page Routing complète + gestion server_audio_users dans Config

- Page Routing : matrices Entrées→Groupes et Groupes→Sorties avec checkboxes,
  éditeur de noms de canaux (ajout/suppression dynamique), sauvegarde YAML directe
- Page Config : section Utilisateurs Audio Serveur (CRUD complet, modal avec
  sélecteur de groupe, canaux entrée/sortie)
- IPC main.js : handlers server-audio-users:list/create/update/delete,
  routing:get, routing:save
- preload.js : namespaces electronAPI.serverAudioUsers et electronAPI.routing
- showModal : support du type 'select' avec options
- loadViewData : routing et config lisibles sans serveur (YAML direct)
This commit is contained in:
2026-07-01 14:27:35 +02:00
parent 87a1370ad4
commit 9a2bec6d2f
5 changed files with 723 additions and 18 deletions
+68
View File
@@ -40,6 +40,9 @@
<button class="nav-item" data-view="groups">
👥 Groupes
</button>
<button class="nav-item" data-view="routing">
🔀 Routing
</button>
<button class="nav-item" data-view="monitoring">
📈 Monitoring
</button>
@@ -123,6 +126,15 @@
<button class="btn btn-primary" id="btn-save-device">Appliquer</button>
</div>
<div class="section">
<h3>🔗 Utilisateurs Audio Serveur</h3>
<p class="config-note" style="margin-bottom: 1rem">Participants LiveKit côté serveur avec canaux physiques d'entrée et de sortie dédiés (mix-minus natif). Voir aussi la page <strong>Routing</strong> pour le câblage entre canaux et groupes.</p>
<button class="btn btn-primary btn-small" id="btn-add-server-audio-user"> Ajouter</button>
<div id="server-audio-users-list" class="groups-list" style="margin-top: 1rem">
<p class="empty-state">Chargement...</p>
</div>
</div>
<div class="section">
<h3>💾 Sauvegarde de configuration</h3>
<div class="config-actions">
@@ -163,6 +175,62 @@
</div>
</div>
<!-- Routing View -->
<div id="view-routing" class="view">
<h2>Routing Audio</h2>
<!-- Noms des canaux -->
<div class="section">
<h3>🏷️ Noms des Canaux</h3>
<p class="config-note" style="margin-bottom: 1rem">Définissez les canaux physiques disponibles. Les matrices de routing se mettent à jour après la sauvegarde.</p>
<div class="channel-names-grid">
<div class="channel-names-col">
<div class="channel-names-col-header">
<h4>Canaux Entrée</h4>
<button class="btn btn-small btn-secondary" id="btn-add-input-channel"> Ajouter</button>
</div>
<div id="channel-names-inputs" class="channel-names-list">
<p class="empty-state">Chargement...</p>
</div>
</div>
<div class="channel-names-col">
<div class="channel-names-col-header">
<h4>Canaux Sortie</h4>
<button class="btn btn-small btn-secondary" id="btn-add-output-channel"> Ajouter</button>
</div>
<div id="channel-names-outputs" class="channel-names-list">
<p class="empty-state">Chargement...</p>
</div>
</div>
</div>
</div>
<!-- Matrice Entrées → Groupes -->
<div class="section">
<h3>🎙️ Entrées → Groupes</h3>
<p class="config-note" style="margin-bottom: 1rem">Quels canaux physiques d'entrée alimentent quels groupes LiveKit.</p>
<div class="routing-matrix-wrapper" id="routing-input-matrix">
<p class="empty-state">Chargement...</p>
</div>
</div>
<!-- Matrice Groupes → Sorties -->
<div class="section">
<h3>🔊 Groupes → Sorties</h3>
<p class="config-note" style="margin-bottom: 1rem">Vers quels canaux physiques de sortie chaque groupe est routé.</p>
<div class="routing-matrix-wrapper" id="routing-output-matrix">
<p class="empty-state">Chargement...</p>
</div>
</div>
<!-- Actions -->
<div class="routing-actions">
<button class="btn btn-primary" id="btn-save-routing">Sauvegarder</button>
<button class="btn btn-secondary" id="btn-reload-routing">Recharger</button>
<span class="config-note routing-restart-note hidden" id="routing-server-note">⚠️ Redémarrez le serveur pour appliquer les changements.</span>
</div>
</div>
<!-- Monitoring View -->
<div id="view-monitoring" class="view">
<h2>Monitoring Audio</h2>