Layout and search fix
🏗️ Build and Test JellyTau / Run Tests (push) Failing after 2m4s
🏗️ Build and Test JellyTau / Android Compile Check (push) Has been skipped
Traceability Validation / Check Requirement Traces (push) Successful in 23s
Build & Release / Run Tests (push) Failing after 2m45s
Build & Release / Build Linux (push) Has been skipped
Build & Release / Build Android (push) Has been skipped
Build & Release / Create Release (push) Has been skipped

This commit is contained in:
2026-07-11 19:55:55 +02:00
parent a2cd9978f0
commit 2a1f1689b4
20 changed files with 991 additions and 995 deletions
+15
View File
@@ -124,6 +124,21 @@ pub enum PlayerStatusEvent {
/// All active controllable sessions from Jellyfin
sessions: Vec<crate::jellyfin::client::SessionInfo>,
},
/// The authoritative playback mode changed in the Rust backend.
///
/// The Rust `PlaybackModeManager` is the single source of truth for which
/// device playback commands route to (local vs a remote session). The
/// frontend keeps a mirror store for the UI; without this event that mirror
/// drifts out of sync (e.g. a mode transition happens inside a transfer or a
/// local stop that the frontend never learns about), and controls then route
/// to the wrong device — the classic "it keeps playing on the remote" bug.
/// The frontend reconciles its store to this payload whenever it fires.
PlaybackModeChanged {
/// New mode: "local", "remote", or "idle".
mode: String,
/// Session id when `mode == "remote"`, otherwise `None`.
session_id: Option<String>,
},
/// The user asked to disconnect from the remote session and resume locally.
///
/// Emitted when the lockscreen Stop button is pressed while casting. The