From 3672c2c260562e5974668daef84f788af49d11e0 Mon Sep 17 00:00:00 2001 From: Eva Date: Sat, 30 May 2026 16:10:49 +0700 Subject: [PATCH] =?UTF-8?q?fix(openworlds):=20Resume=E2=86=92play=20banner?= =?UTF-8?q?=20mints=20a=20DM=20via=20the=20bridge=20instead=20of=20dead-en?= =?UTF-8?q?ding=20read-only=20(#356)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- viewer/openworlds/screen-launcher.jsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/viewer/openworlds/screen-launcher.jsx b/viewer/openworlds/screen-launcher.jsx index be34b2db..b54ab774 100644 --- a/viewer/openworlds/screen-launcher.jsx +++ b/viewer/openworlds/screen-launcher.jsx @@ -88,6 +88,14 @@ function ScreenLauncher({ onNavigate, state, setState }) { const target = c || playableCampaign; if (!target) return; setState((s) => ({ ...s, activeCampaign: target.id })); + // #356: in the native app a canResume-but-not-yet-live campaign has NO attached DM, so navigating + // straight to the table lands in the read-only director's view. Mint a provider session via the + // bridge (the startPlay path, exactly as onResume does). Only drop straight into the table when the + // session is ALREADY live (an in-browser already-live run, or a browser preview with no bridge). + if (window.OpenWorldsNative?.hasBridge?.() && !target.live) { + startPlay(target.world); + return; + } onNavigate("table"); };