MPRIS Play/Pause stops audio but spotatui keeps showing and reporting playing
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 72/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- rust
- Lĩnh vực
- audio-video-rtc, backend
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Start spotatui with native streaming and play a song.
- Run playerctl -p spotatui pause (or play-pause).
- The audio stops, but the TUI still shows Playing and playerctl -p spotatui status prints Playing.
- 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 }
- Ngôn ngữ chính
- Rust
- Star
- 1.4k
- Fork
- 238
- Merge trung bình
- 10 giờ 4 phút
- Pull request đã merge (30 ngày)
- 166
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của LargeModGames/spotatui
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
LargeModGames/spotatui#977 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
LargeModGames/spotatui#872 · 18 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Text Emphasis off still bolds the selected row in every list and tableCó thể đã có người làm @jaopdc11 đã nhận 16 ngày trước. Đang mởbug good first issue
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
LargeModGames/spotatui#822 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 53/100
LargeModGames/spotatui#989 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug/qol : implicit error messageĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 57/100
LargeModGames/spotatui#984 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của LargeModGames/spotatui
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
RustCrypto/utils#1597 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Non-`main` default branchesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
max-sixty/worktrunk#4727 · 7 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 1 ngày
-
follow-up
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
carrick-sh/carrick#1859 ·
Maintainer thường phản hồi trong vòng 1 ngày