- Introduit DeviceAdapter trait pour isoler la livraison aux devices (browser, Android Auto…) - Remplace player_command Option<serde_json::Value> par VecDeque typée DeviceCommand - Corrige P0 (play_handler bloqué sans URI) et résout les bugs de pause/flush non transmis au browser - Ajoute AudioContext dans PMOPlayer.ts pour réduire le buffer décodé (~5s → ~50ms) - Implémenter auto-reconnect sur coupure réseau HTTP - Unifie le format de position en HH:MM:SS (UPnP) - Ajoute endpoints JSON /nowplaying et /state pour les futurs adaptateurs — Restructuration modulaire préparée (core/ vs browser/) pour facilité l'ajout de devices
1.3 KiB
1.3 KiB
** Ce travail devra être réalisé en suivant scrupuleusement les consignes listées dans le fichier @Rules_optimal.md **
Cette modification cible la cratte pmocontrol uniquement
Les musiques Renderer, Disposent maintenant d'une méthode leur permettant de savoir s'ils sont en train de diffuser une webradio via leur méthode is_playing_a_stream.
Il faut donc que dans la méthode poll_and_emit_changes On fait ce qui est nécessaire pour envoyer des données de position et de durée de track corrigée si l'on a is_playing_a_stream à vrai.
Si is_playing_a_stream à vrai:
- Maintenir à jour la valeur
track_start_timede la classe MusicRenderer En la mettant égale à now de metadata. - Loguer cet événement au niveau info.
- Extraire la durée du morceau depuis les métadonnées
fournies par la structure de position.
- Si la durée est disponible:
- Utilisez cette donnée pour la pousser sur le bus des événements.
- calculer la position dans le flux comme la différence entre now et track_start_time.
- Sinon: Envoyer zéro pour la position et none pour la duration.
- Si la durée est disponible:
- Sinon, transmettre les données fournies comme actuellement.