MPRIS Play/Pause stops audio but spotatui keeps showing and reporting playing

Abierto
#985 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@Radhik-Amp ya está trabajando en esto.

Desde el 6/11/2026.

  • #986 de @Radhik-Amp — abierto

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust

Línea de trabajo

Read pause_playback() in src/infra/network/playback.rs, the MPRIS handlers in src/runtime/startup.rs, and PlayerEvent::Paused in src/infra/player/events.rs. Trace which state and pending playback actions each path updates, then run the relevant playback and MPRIS tests. Done when pausing through MPRIS updates the TUI and reported PlaybackStatus to Paused and does not trigger the reported recovery error.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
What happened

When I pause from outside spotatui (playerctl, Quickshell's media widget, media keys), the audio stops, but spotatui still thinks it's playing. Its own playbar shows Playing, and over MPRIS it keeps reporting PlaybackStatus as Playing, so desktop widgets show the wrong icon and a frozen position. Shortly after, the TUI shows Failed to start native playback.

Pausing with spotatui's own key works: the TUI, playerctl status and Quickshell all switch to Paused.

playerctl -p spotatui pause and playerctl -p spotatui play-pause both trigger it.

The two pause paths do different amounts of work. The TUI key goes through pause_playback() in src/infra/network/playback.rs, which pauses the player and also clears pending_start_playback and native_load_watchdog, cancels play-after-transfer, and sets native_is_playing and current_playback_context.is_playing to false. The MPRIS handlers in src/runtime/startup.rs (MprisEvent::Pause, PlayPause, Stop) only call player.pause() and set_native_playback_intent(false), so the app state still says playing.

The Failed to start native playback error may come from the play-after-transfer flag the MPRIS path doesn't cancel. The PlayerEvent::Paused handler in src/infra/player/events.rs checks take_play_after_transfer() first. If the flag is set, it calls player.play() and skips mpris.set_playback_status(false). I haven't confirmed this.

Expected: pausing over MPRIS behaves the same as pausing in the TUI. One shared App method for the pause bookkeeping, called from both paths, would cover it.

Steps to reproduce
  1. Start spotatui with native streaming and play a song.
  2. Run playerctl -p spotatui pause (or play-pause).
  3. The audio stops, but the TUI still shows Playing and playerctl -p spotatui status prints Playing.
  4. Shortly after, Failed to start native playback appears.
Frontend

Terminal app

Source

Spotify

spotatui version

0.47.0

OS

Fedora 44

How you installed spotatui

cargo install / cargo binstall

Terminal

Kitty

Debug log

The MPRIS Pause/PlayPause path writes nothing to the log, so the pause itself
doesn't appear. In-app toggles do log ("toggling playback: ..."). This is the snippet from
a run where the error appeared:

[01:17:10][spotatui::core::app::transport][INFO] toggling playback: paused
[01:17:36][spotatui::core::app::transport][INFO] toggling playback: playing
[01:17:49][spotatui::infra::network::playback][INFO] starting native playback via direct load route
[01:17:49][spotatui_librespot_connect::spirc][WARN] SpircCommand::Activate will be ignored while already active
[01:17:54][spotatui::core::app::tick][WARN] no player event within 5s of native load; forcing recovery attempt 1
[01:17:54][spotatui::infra::player::events][INFO] attempting native streaming recovery
[01:17:54][spotatui::infra::player::events][INFO] recovery route: replay parked StartPlayback
[01:17:55][spotatui::infra::network::playback][INFO] recovery replay: starting native playback via Spotify context route on device <device>
[01:17:58][spotatui_librespot_connect::spirc][ERROR] failed to handle request: Invalid state { context is not available. type: Default }
[01:17:58][spotatui::infra::network::requests][WARN] Spotify API PUT /v1/me/player/play?device_id=<device> failed in 3043ms: Spotify API 404 Not Found failed: Requested entity was not found
[01:17:58][spotatui::core::app::status][INFO] error occurred: Failed to start native playback: Spotify API 404 Not Found ... { Response status code: 410 Gone }
Lenguaje dominante
Rust
Estrellas
1.4k
Forks
238
Merge medio
10 h 1 min
PR fusionados (30 d)
171

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de LargeModGames/spotatui

Todos los issues de LargeModGames/spotatui

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.