diff --git a/src/qconnect.rs b/src/qconnect.rs index d9dd01b..7e40861 100644 --- a/src/qconnect.rs +++ b/src/qconnect.rs @@ -1090,7 +1090,23 @@ async fn run_connection( if !loaded_new_track { match ps { 2 => { - if current_playing_state == 3 { + let status = player.status(); + let should_restart_same_track = current_track.is_some() + && (track_ended || status.state == PlayerState::Stopped); + + if should_restart_same_track { + let restart_pos = requested_pos.unwrap_or(0); + info!( + "[STATE] Restarting current track from {}ms (ended={} player_state={:?})", + restart_pos, + track_ended, + status.state + ); + player.send(PlayerCommand::Seek(restart_pos)); + current_playing_state = 2; + current_position_ms = restart_pos; + track_ended = false; + } else if current_playing_state == 3 { info!("[STATE] Resuming playback"); player.send(PlayerCommand::Resume); current_playing_state = 2;