Skip to content

Commit 4f9f49f

Browse files
committed
Fix DevTools state and appearance control
1 parent 95c1237 commit 4f9f49f

3 files changed

Lines changed: 30 additions & 14 deletions

File tree

client/src/app/AppShell.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1872,9 +1872,13 @@ export function AppShell({
18721872
if (!selectedSimulator) {
18731873
return;
18741874
}
1875-
const encoded = JSON.stringify({ type: "toggleAppearance" });
1876-
if (!sendWebRtcControlMessage(encoded)) {
1877-
void runAction(() => toggleAppearance(selectedSimulator.udid));
1875+
if (
1876+
!sendControl(selectedSimulator.udid, { type: "toggleAppearance" })
1877+
) {
1878+
void runAction(
1879+
() => toggleAppearance(selectedSimulator.udid),
1880+
false,
1881+
);
18781882
}
18791883
}}
18801884
onToggleDebug={() => setDebugVisible((current) => !current)}

server/src/api/routes.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,7 +1934,8 @@ async fn handle_control_socket(state: AppState, udid: String, socket: WebSocket)
19341934
))
19351935
.await;
19361936
let (control_tx, control_rx) = mpsc::unbounded_channel::<ControlMessage>();
1937-
let control_task = task::spawn(run_control_queue(session, udid.clone(), control_rx));
1937+
let bridge = state.registry.bridge().clone();
1938+
let control_task = task::spawn(run_control_queue(session, bridge, udid.clone(), control_rx));
19381939

19391940
while let Some(message) = receiver.next().await {
19401941
let text = match message {
@@ -1968,6 +1969,7 @@ async fn handle_control_socket(state: AppState, udid: String, socket: WebSocket)
19681969

19691970
async fn run_control_queue(
19701971
session: SimulatorSession,
1972+
bridge: NativeBridge,
19711973
udid: String,
19721974
mut receiver: mpsc::UnboundedReceiver<ControlMessage>,
19731975
) {
@@ -1990,7 +1992,13 @@ async fn run_control_queue(
19901992
}
19911993
}
19921994
}
1993-
if let Err(error) = run_control_message(session.clone(), message).await {
1995+
let result = match message {
1996+
ControlMessage::ToggleAppearance => {
1997+
run_toggle_appearance_control(bridge.clone(), udid.clone()).await
1998+
}
1999+
message => run_control_message(session.clone(), message).await,
2000+
};
2001+
if let Err(error) = result {
19942002
tracing::debug!("Control message failed for {udid}: {error}");
19952003
}
19962004
}
@@ -2094,13 +2102,22 @@ pub(crate) async fn run_control_message(
20942102
ControlMessage::RotateLeft => session.rotate_left(),
20952103
ControlMessage::RotateRight => session.rotate_right(),
20962104
ControlMessage::ToggleAppearance => Err(AppError::bad_request(
2097-
"`toggleAppearance` requires the WebRTC control channel.",
2105+
"`toggleAppearance` requires a native bridge control handler.",
20982106
)),
20992107
})
21002108
.await
21012109
.map_err(|error| AppError::internal(format!("Failed to join control task: {error}")))?
21022110
}
21032111

2112+
pub(crate) async fn run_toggle_appearance_control(
2113+
bridge: NativeBridge,
2114+
udid: String,
2115+
) -> Result<(), AppError> {
2116+
task::spawn_blocking(move || bridge.toggle_appearance(&udid))
2117+
.await
2118+
.map_err(|error| AppError::internal(format!("Failed to join control task: {error}")))?
2119+
}
2120+
21042121
async fn send_key(
21052122
State(state): State<AppState>,
21062123
Path(udid): Path<String>,

server/src/transport/webrtc.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::api::routes::{
2-
apply_stream_quality_payload, run_control_message, AppState, ControlMessage,
3-
StreamQualityPayload,
2+
apply_stream_quality_payload, run_control_message, run_toggle_appearance_control, AppState,
3+
ControlMessage, StreamQualityPayload,
44
};
55
use crate::error::AppError;
66
use crate::metrics::counters::ClientStreamStats;
@@ -512,12 +512,7 @@ async fn run_webrtc_control_queue(
512512
ControlMessage::ToggleAppearance => {
513513
let bridge = state.registry.bridge().clone();
514514
let action_udid = udid.clone();
515-
let result = task::spawn_blocking(move || bridge.toggle_appearance(&action_udid))
516-
.await
517-
.map_err(|error| {
518-
AppError::internal(format!("Failed to join control task: {error}"))
519-
})
520-
.and_then(|result| result);
515+
let result = run_toggle_appearance_control(bridge, action_udid).await;
521516
if let Err(error) = result {
522517
warn!("WebRTC control message failed for {udid}: {error}");
523518
}

0 commit comments

Comments
 (0)