diff --git a/src-tauri/src/commands/player/mod.rs b/src-tauri/src/commands/player/mod.rs index fdecb6d8..a0a569a0 100644 --- a/src-tauri/src/commands/player/mod.rs +++ b/src-tauri/src/commands/player/mod.rs @@ -369,8 +369,21 @@ pub enum AudioTrackSwitchResponse { #[derive(specta::Type, Debug, Serialize)] #[serde(tag = "strategy", rename_all = "camelCase")] pub enum StreamQualityResponse { - /// The native backend was reloaded here; nothing left for the frontend. + /// The native backend was reloaded here; nothing left for the frontend to + /// *do* — but it still has to be told what was negotiated. + /// + /// This carried only a position at first, which left the picker on Android + /// pinned to the rendition of the *first* stream: the UI derives the rung in + /// force from the selection it holds, nothing replaced that selection on the + /// native path, and a transcode always has a rendition — so the fallback + /// that would have used the requested value was never reached. The stream + /// changed and the menu did not. + /// + /// TRACES: UR-074, UR-079 | DR-225, DR-226 Native { + /// What the backend actually opened, so the UI reflects it rather than + /// assuming the request was honoured verbatim. + selection: StreamSelection, /// Position playback resumed at. position: f64, }, @@ -1718,7 +1731,26 @@ pub async fn player_set_stream_quality( // TRACES: UR-074, UR-079 | DR-225 crate::repository::online::set_playback_quality_override(quality); - let position = current_position.unwrap_or(0.0); + // Where to resume. `current_position` is the *element's* clock, which only + // the webview path has — on a native backend there is no `