Fix auto-play next track during pause/unpause transitions
All checks were successful
Build and Release / build-and-release (push) Successful in 53s

When rapidly pressing play/pause, MPV briefly reports idle-active
as true during state transitions. Combined with our player_state
being set to Playing after unpause, this incorrectly triggered the
auto-play next track logic.

Fix: Add is_paused() check to auto-play condition to ensure we only
advance to next track when the current track actually ends, not
during pause state transitions.
This commit is contained in:
Christoffer Martinsson 2025-12-11 16:20:14 +01:00
parent 1c2c942e4b
commit 55e3f04e2c
3 changed files with 7 additions and 2 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "cm-player"
version = "0.1.21"
version = "0.1.22"
edition = "2021"
[dependencies]

View File

@ -304,7 +304,8 @@ async fn run_app<B: ratatui::backend::Backend>(
// Check if track ended and play next (but only if track was actually loaded AND played)
// Require position > 0.5 to ensure track actually started playing (not just loaded)
if player.is_idle() && state.player_state == PlayerState::Playing && state.current_duration > 0.0 && state.current_position > 0.5 {
// Also check !is_paused to avoid triggering during pause/unpause transitions
if player.is_idle() && !player.is_paused() && state.player_state == PlayerState::Playing && state.current_duration > 0.0 && state.current_position > 0.5 {
state.play_next();
// play_next() handles the play mode and may stop if in Normal mode at end
if state.player_state == PlayerState::Playing {

View File

@ -327,6 +327,10 @@ impl Player {
self.is_idle
}
pub fn is_paused(&self) -> bool {
self.is_paused
}
pub fn is_process_alive(&mut self) -> bool {
// Check if mpv process is still running
match self.process.try_wait() {