Debug playlist lecture
This commit is contained in:
@@ -1833,7 +1833,14 @@ impl ControlPoint {
|
||||
binding: Some(binding),
|
||||
});
|
||||
|
||||
let mut auto_start_cb = |rid: &RendererId| self.start_queue_playback_if_idle(rid);
|
||||
// For initial attach with auto_play, force playback start (don't check if idle)
|
||||
let mut auto_start_cb = |rid: &RendererId| {
|
||||
debug!(
|
||||
renderer = rid.0.as_str(),
|
||||
"Attach callback: forcing playback start (not checking if idle)"
|
||||
);
|
||||
self.play_current_from_queue(rid)
|
||||
};
|
||||
let callback: Option<&mut dyn FnMut(&RendererId) -> anyhow::Result<()>> = if auto_play {
|
||||
Some(&mut auto_start_cb)
|
||||
} else {
|
||||
@@ -2683,6 +2690,12 @@ fn refresh_attached_queue_for(
|
||||
|
||||
if auto_play {
|
||||
if let Some(callback) = after_refresh.as_deref_mut() {
|
||||
debug!(
|
||||
renderer = renderer_id.0.as_str(),
|
||||
server = server_id.0.as_str(),
|
||||
container = container_id.as_str(),
|
||||
"Auto-play enabled: calling callback to start playback"
|
||||
);
|
||||
if let Err(err) = callback(renderer_id) {
|
||||
warn!(
|
||||
renderer = renderer_id.0.as_str(),
|
||||
@@ -2691,8 +2704,25 @@ fn refresh_attached_queue_for(
|
||||
error = %err,
|
||||
"Failed to auto-start playback after playlist refresh"
|
||||
);
|
||||
} else {
|
||||
info!(
|
||||
renderer = renderer_id.0.as_str(),
|
||||
server = server_id.0.as_str(),
|
||||
container = container_id.as_str(),
|
||||
"Auto-play callback completed successfully"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
debug!(
|
||||
renderer = renderer_id.0.as_str(),
|
||||
"Auto-play enabled but no callback provided"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
debug!(
|
||||
renderer = renderer_id.0.as_str(),
|
||||
"Auto-play disabled, skipping playback start"
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
@@ -22,7 +22,7 @@ use crate::{
|
||||
PlaybackPosition, PlaybackState, TransportControl, UpnpRenderer, VolumeControl,
|
||||
};
|
||||
use anyhow::{Result, anyhow};
|
||||
use tracing::warn;
|
||||
use tracing::{debug, info, warn};
|
||||
|
||||
/// Backend-agnostic façade exposing transport, volume, and status contracts.
|
||||
#[derive(Clone, Debug)]
|
||||
@@ -281,8 +281,18 @@ impl MusicRenderer {
|
||||
pub fn clear_for_playlist_attach(&self) -> Result<()> {
|
||||
match self {
|
||||
MusicRenderer::OpenHome(_) => {
|
||||
// For OpenHome: clear the playlist on the renderer itself
|
||||
self.openhome_playlist_clear()
|
||||
// For OpenHome: clear the playlist (DeleteAll also stops playback automatically)
|
||||
// then explicitly stop to ensure clean state
|
||||
self.openhome_playlist_clear()?;
|
||||
self.stop().or_else(|err| -> Result<()> {
|
||||
// If stop fails (e.g., already stopped), that's fine
|
||||
warn!(
|
||||
renderer = self.id().0.as_str(),
|
||||
error = %err,
|
||||
"Stop failed after clearing OpenHome playlist (continuing anyway)"
|
||||
);
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
MusicRenderer::Upnp(_)
|
||||
| MusicRenderer::Chromecast(_)
|
||||
@@ -436,21 +446,57 @@ impl MusicRenderer {
|
||||
// Get the current OpenHome playlist snapshot
|
||||
let snapshot = self.fetch_openhome_playlist_snapshot()?;
|
||||
|
||||
debug!(
|
||||
renderer = self.id().0.as_str(),
|
||||
tracks_count = snapshot.tracks.len(),
|
||||
current_id = ?snapshot.current_id,
|
||||
current_index = ?snapshot.current_index,
|
||||
"play_current_from_backend_queue: OpenHome snapshot fetched"
|
||||
);
|
||||
|
||||
if snapshot.tracks.is_empty() {
|
||||
return Err(anyhow!("OpenHome playlist is empty"));
|
||||
}
|
||||
|
||||
// Find the track_id to play (prefer current_id, then current_index, then first)
|
||||
let target_track_id = if let Some(current_id) = snapshot.current_id {
|
||||
debug!(
|
||||
renderer = self.id().0.as_str(),
|
||||
track_id = current_id,
|
||||
"Using current_id for playback"
|
||||
);
|
||||
Some(current_id)
|
||||
} else if let Some(current_idx) = snapshot.current_index {
|
||||
snapshot.tracks.get(current_idx).map(|track| track.id)
|
||||
let track_id = snapshot.tracks.get(current_idx).map(|track| track.id);
|
||||
debug!(
|
||||
renderer = self.id().0.as_str(),
|
||||
current_idx,
|
||||
track_id = ?track_id,
|
||||
"Using current_index for playback"
|
||||
);
|
||||
track_id
|
||||
} else {
|
||||
snapshot.tracks.first().map(|track| track.id)
|
||||
let track_id = snapshot.tracks.first().map(|track| track.id);
|
||||
debug!(
|
||||
renderer = self.id().0.as_str(),
|
||||
track_id = ?track_id,
|
||||
"Using first track for playback"
|
||||
);
|
||||
track_id
|
||||
};
|
||||
|
||||
if let Some(track_id) = target_track_id {
|
||||
info!(
|
||||
renderer = self.id().0.as_str(),
|
||||
track_id,
|
||||
"Calling openhome_playlist_play_id to start playback"
|
||||
);
|
||||
self.openhome_playlist_play_id(track_id)?;
|
||||
info!(
|
||||
renderer = self.id().0.as_str(),
|
||||
track_id,
|
||||
"Successfully called openhome_playlist_play_id"
|
||||
);
|
||||
Ok(())
|
||||
} else {
|
||||
Err(anyhow!("No track to play in OpenHome playlist"))
|
||||
|
||||
Reference in New Issue
Block a user