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:
2026-01-16 23:37:39 +01:00
parent 4cddbc8382
commit 41a4f0eaea
5 changed files with 185 additions and 4 deletions

View File

@@ -1599,9 +1599,22 @@ async fn play_content(
// The UI will be updated via SSE events when playback starts
tokio::task::spawn(async move {
let result = tokio::task::spawn_blocking(move || {
debug!(
renderer = rid.0.as_str(),
server = sid.0.as_str(),
object = object_id.as_str(),
"play_content: fetching playback items"
);
// Fetch playback items from server
let items = fetch_playback_items(&control_point, &sid, &object_id)?;
debug!(
renderer = rid.0.as_str(),
item_count = items.len(),
"play_content: fetched items"
);
if items.is_empty() {
return Err(anyhow::anyhow!("No playable content found"));
}
@@ -2144,8 +2157,16 @@ fn fetch_playback_items(
));
}
// Browse the object to get entries
let entries = server.browse_children(object_id, 0, BROWSE_PAGE_SIZE)?;
// First, get metadata for the object to determine if it's a container or item
let object_metadata = server.browse_object(object_id)?;
let entries = if object_metadata.is_container {
// For containers, browse children to get all items
server.browse_children(object_id, 0, BROWSE_PAGE_SIZE)?
} else {
// For items, use the object itself
vec![object_metadata]
};
debug!(
server_id = server_id.0.as_str(),