Implementing the is_playing_a_stream method...
Fournir une gestion correcte de la barre de progression de lecture sur des flux continus...
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## Résumé
|
||||
|
||||
Implémentation complète de l'étape 2 de la tâche : ajout d'un indicateur visuel "Web Radio" dans l'interface web pour signaler la lecture d'un flux continu (webradio). L'indicateur s'affiche automatiquement à côté de l'indicateur "Attachée à une playlist" dans le composant QueueViewer.
|
||||
Implémentation complète de l'étape 2 de la tâche : ajout d'un indicateur visuel "Web Radio" dans l'interface web pour signaler la lecture d'un flux continu (webradio). L'indicateur s'affiche automatiquement à côté de l'indicateur "Attachée à une playlist" dans le composant QueueViewer. Optimisation de la détection de stream avec cache et traitement asynchrone pour éviter de ralentir l'interface.
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
@@ -18,20 +18,47 @@ Implémentation complète de l'étape 2 de la tâche : ajout d'un indicateur vis
|
||||
- Refactorisation : création de la fonction helper `media_server_event_to_payload()` pour éliminer la duplication de code entre les conversions de `MediaServerEvent` vers `MediaServerEventPayload`
|
||||
- Remplacement de deux blocs match dupliqués par des appels à cette fonction helper
|
||||
|
||||
4. **pmocontrol/src/music_renderer/musicrenderer.rs**
|
||||
- Ajout d'un log `tracing::info!()` lors du changement d'état stream pour faciliter le débogage
|
||||
|
||||
5. **pmocontrol/src/music_renderer/stream_detection.rs**
|
||||
- **Optimisation majeure** : Ajout d'un cache global thread-safe (`STREAM_CACHE`) pour mémoriser les résultats de détection par URL
|
||||
- Ajout d'un set de vérifications en cours (`PENDING_CHECKS`) pour éviter les doublons de requêtes HTTP sur la même URL
|
||||
- Modification de `is_continuous_stream_url()` pour :
|
||||
- Vérifier le cache en premier (retour immédiat si trouvé)
|
||||
- Ne pas lancer de nouvelle détection si déjà en cours
|
||||
- Lancer la détection HTTP HEAD dans un thread séparé (non-bloquant)
|
||||
- Retourner `false` temporairement pendant la détection, le watcher mettra à jour à la prochaine itération
|
||||
- Utilisation de `std::sync::LazyLock` (stdlib Rust 1.80+) au lieu de lazy_static
|
||||
|
||||
### Frontend (webapp)
|
||||
|
||||
4. **pmoapp/webapp/src/services/pmocontrol/types.ts**
|
||||
6. **pmoapp/webapp/src/services/pmocontrol/types.ts**
|
||||
- Ajout du type d'événement SSE `stream_state_changed` dans `RendererEventPayload`
|
||||
- Ajout du champ `is_stream: boolean` dans `FullRendererSnapshot`
|
||||
|
||||
5. **pmoapp/webapp/src/composables/useRenderers.ts**
|
||||
7. **pmoapp/webapp/src/composables/useRenderers.ts**
|
||||
- Ajout de la gestion de l'événement `stream_state_changed` dans le switch statement
|
||||
- Ajout du computed `isStream` dans le composable `useRenderer()`
|
||||
- Export de `isStream` dans le retour du composable
|
||||
|
||||
6. **pmoapp/webapp/src/components/pmocontrol/QueueViewer.vue**
|
||||
8. **pmoapp/webapp/src/components/pmocontrol/QueueViewer.vue**
|
||||
- Import de l'icône `Radio` depuis lucide-vue-next
|
||||
- Récupération de `isStream` depuis le composable `useRenderer()`
|
||||
- Ajout d'un conteneur `status-indicators` pour wrapper les indicateurs
|
||||
- Ajout de l'indicateur visuel "Web Radio" avec icône Radio
|
||||
- Ajout des styles CSS pour `.stream-indicator` (badge violet) et `.status-indicators`
|
||||
- Ajout de l'indicateur visuel "Web Radio" avec icône Radio (badge violet)
|
||||
- Ajout des styles CSS pour `.stream-indicator` et `.status-indicators`
|
||||
|
||||
## Améliorations d'optimisation
|
||||
|
||||
### Problème identifié
|
||||
La détection de stream via requête HTTP HEAD synchrone bloquait l'interface et ralentissait la réactivité.
|
||||
|
||||
### Solution implémentée
|
||||
- **Cache en mémoire** : Les résultats sont mémorisés par URL (une URL ne change pas de nature)
|
||||
- **Détection asynchrone** : La requête HTTP est déportée dans un thread séparé
|
||||
- **Anti-doublon** : Un mécanisme empêche de relancer une détection déjà en cours pour la même URL
|
||||
- **Comportement graceful** : Retourne `false` temporairement pendant la première détection, le watcher met à jour l'état dès que le résultat est disponible
|
||||
|
||||
### Résultat
|
||||
Interface fluide sans blocage, les indicateurs "Web Radio" apparaissent après quelques centaines de millisecondes lors de la première lecture d'une URL, puis instantanément grâce au cache pour les lectures suivantes.
|
||||
|
||||
Reference in New Issue
Block a user