Corriger les informations de position pour les flux continus

Cette modification corrige le calcul de la position et de la durée pour les flux continus (webradio) en ajustant la méthode `poll_and_emit_changes()` dans `pmocontrol`. Elle détecte maintenant les flux via `is_playing_a_stream()`, extrait la durée depuis les métadonnées DIDL, et calcule la position relative basée sur `track_start_time`. Les valeurs par défaut (zéro pour la position, none pour la durée) sont utilisées si aucune durée n'est disponible. Les fichiers modifiés incluent `musicrenderer.rs`, `CurrentTrack.vue` et `useRenderers.ts` pour assurer une gestion cohérente des données de position et de durée.
This commit is contained in:
2026-01-31 13:11:55 +01:00
parent d98bc357b9
commit 5440e72afb
6 changed files with 143 additions and 30 deletions

View File

@@ -123,6 +123,9 @@ function ensureSSEConnected() {
break;
case "position_changed":
// Mettre à jour position et durée de manière atomique pour garantir la cohérence
// Le backend envoie TOUJOURS les deux valeurs (même si null)
// Convertir rel_time (HH:MM:SS) en millisecondes
if (event.rel_time) {
const parts = event.rel_time.split(":").map(Number);
@@ -133,7 +136,11 @@ function ensureSSEConnected() {
(parts[2] ?? 0)) *
1000;
}
} else {
// Si rel_time est null/undefined, mettre position à 0
snapshot.state.position_ms = 0;
}
// Convertir track_duration (HH:MM:SS) en millisecondes
if (event.track_duration) {
const parts = event.track_duration.split(":").map(Number);
@@ -144,7 +151,15 @@ function ensureSSEConnected() {
(parts[2] ?? 0)) *
1000;
}
} else {
// Si track_duration est null/undefined (flux continu sans durée),
// mettre duration_ms à null pour afficher "--:--"
snapshot.state.duration_ms = null;
}
// Important: Trigger reactivity en réassignant l'objet complet
// Cela garantit que position_ms et duration_ms sont mis à jour atomiquement
snapshotState.snapshots.set(rendererId, { ...snapshot });
break;
case "volume_changed":