Preserve playback position on quality switch

When SetMaxAudioQuality triggers a stream restart, resume from the current player position instead of restarting at the beginning to avoid audible jumps and keep UX consistent.
This commit is contained in:
joren
2026-03-31 23:50:54 +02:00
parent 20d5ecf231
commit a26db5cf96

View File

@@ -1332,9 +1332,10 @@ async fn run_connection(
// If currently playing, restart at new quality // If currently playing, restart at new quality
if current_playing_state == 2 && current_track_id != 0 { if current_playing_state == 2 && current_track_id != 0 {
let restart_pos = player.status().position_ms;
info!("Restarting track {} at new quality format_id={}", current_track_id, format_id); info!("Restarting track {} at new quality format_id={}", current_track_id, format_id);
current_buffer_state = 1; // BUFFERING current_buffer_state = 1; // BUFFERING
current_position_ms = 0; current_position_ms = restart_pos;
send_state!(ws_tx, msg_id); send_state!(ws_tx, msg_id);
let track_id_str = current_track_id.to_string(); let track_id_str = current_track_id.to_string();
@@ -1384,7 +1385,7 @@ async fn run_connection(
track_id: current_track_id, track_id: current_track_id,
queue_item_id: current_queue_item_id, queue_item_id: current_queue_item_id,
duration_ms, duration_ms,
start_position_ms: 0, start_position_ms: restart_pos,
}); });
let (fallback_sr, fallback_bits, fallback_ch) = let (fallback_sr, fallback_bits, fallback_ch) =
quality_fallback_audio_params(*quality); quality_fallback_audio_params(*quality);