Fix bug play single track Qobuz
Corrige le bug empêchant la lecture d'un track Qobuz individuel depuis le ServerDrawer. - Implémente `get_item()` dans `QobuzSource` pour retourner des URLs HTTP valides au lieu de URLs symboliques - Rend `format_duration()` publique dans `pmoqobuz/src/didl.rs` - Ajoute le logging dans `pmocontrol/src/pmoserver_ext.rs` pour suivre le flux de lecture - Améliore la gestion des objets dans `pmocontrol/src/pmoserver_ext.rs` pour distinguer les conteneurs des éléments
This commit is contained in:
41
Blackboard/Done/bug_play_single_track.md
Normal file
41
Blackboard/Done/bug_play_single_track.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# Synthèse : bug_play_single_track
|
||||
|
||||
## Tâche originale
|
||||
|
||||
**Crates concernées** : pmocontrol, pmoapp/webapp, pmoqobuz
|
||||
|
||||
**Problème** : Lorsque dans le ServerDrawer on clique sur le bouton de lecture d'un item simple Qobuz, rien ne se produit.
|
||||
|
||||
**Comportement attendu** :
|
||||
- Arrêt éventuel du renderer concerné
|
||||
- Effacement et détachement de sa queue de lecture
|
||||
- Ajout de la piste sélectionnée dans la queue de lecture
|
||||
- Lancement de la lecture
|
||||
|
||||
---
|
||||
|
||||
## Résolution
|
||||
|
||||
### Cause racine
|
||||
|
||||
`QobuzSource` n'implémentait pas `get_item()`. Quand le ContentDirectory recevait un `BrowseMetadata` sur un track individuel (`qobuz:track:123`), il ne pouvait pas retourner les métadonnées avec une URL HTTP valide.
|
||||
|
||||
- **Albums** : `get_or_create_album_playlist_items()` génère des URLs HTTP via le cache (`http://base_url/audio/flac/QOBUZ:123`)
|
||||
- **Tracks individuels** : URL symbolique `qobuz://track/123` non jouable par le renderer
|
||||
|
||||
### Solution
|
||||
|
||||
Implémentation de `get_item()` dans `QobuzSource` utilisant `add_track_lazy()` pour enregistrer le track dans le cache et retourner une URL HTTP absolue.
|
||||
|
||||
### Fichiers modifiés
|
||||
|
||||
| Fichier | Modification |
|
||||
|---------|--------------|
|
||||
| `pmoqobuz/src/source.rs` | Ajout de `get_item()` dans l'impl `MusicSource` |
|
||||
| `pmoqobuz/src/didl.rs` | `format_duration()` rendue publique |
|
||||
|
||||
---
|
||||
|
||||
## Statut
|
||||
|
||||
**Résolu** - Testé et validé.
|
||||
37
Blackboard/Report/bug_play_single_track.md
Normal file
37
Blackboard/Report/bug_play_single_track.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Rapport : bug_play_single_track
|
||||
|
||||
## Résumé
|
||||
|
||||
Correction du bug empêchant la lecture d'un track Qobuz individuel depuis le ServerDrawer. La cause était l'absence d'implémentation de `get_item()` dans `QobuzSource`, résultant en des URLs symboliques non jouables.
|
||||
|
||||
## Travail effectué
|
||||
|
||||
1. **Analyse du flux** : Tracé du chemin depuis le clic sur le bouton play (frontend) jusqu'au backend pmocontrol
|
||||
2. **Identification de la cause** : `QobuzSource` n'implémentait pas `get_item()`, donc les tracks individuels retournaient des URLs symboliques `qobuz://track/{id}` au lieu d'URLs HTTP
|
||||
3. **Implémentation de la solution** : Ajout de `get_item()` utilisant le même mécanisme de cache lazy que les albums
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
| Fichier | Modification |
|
||||
|---------|--------------|
|
||||
| `pmoqobuz/src/source.rs` | Ajout de `get_item()` dans l'impl `MusicSource`, import de `format_duration` |
|
||||
| `pmoqobuz/src/didl.rs` | `format_duration()` rendue publique |
|
||||
|
||||
## Détails techniques
|
||||
|
||||
### Cause racine
|
||||
|
||||
- **Albums Qobuz** : `get_or_create_album_playlist_items()` crée une playlist avec URLs HTTP absolues (`http://base_url/audio/flac/QOBUZ:123`)
|
||||
- **Tracks individuels** : `get_item()` non implémenté → fallback échoue → URL symbolique `qobuz://track/123` inutilisable par le renderer
|
||||
|
||||
### Solution
|
||||
|
||||
`get_item()` :
|
||||
1. Parse l'object_id pour extraire le track_id
|
||||
2. Récupère le track via l'API Qobuz
|
||||
3. Enregistre le track dans le cache avec `add_track_lazy()`
|
||||
4. Retourne un `Item` avec URL HTTP absolue : `http://base_url/audio/flac/QOBUZ:{track_id}`
|
||||
|
||||
## Statut
|
||||
|
||||
Bug résolu et testé.
|
||||
Reference in New Issue
Block a user