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:
@@ -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":
|
||||
|
||||
Reference in New Issue
Block a user