fix(ui): replace findLast with reverse().find() for WebView compat
findLast() requires Chrome 97+ / Android WebView 97+. Older Android devices crash with TypeError in pollStatus(), killing all status updates including the debug log. Use [...arr].reverse().find() which works everywhere. Also pass peerMappedAddr in the direct-call connect invoke. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1055,9 +1055,11 @@ async function pollStatus() {
|
|||||||
if (directCallPeer) {
|
if (directCallPeer) {
|
||||||
// Check the debug buffer for the race result to label
|
// Check the debug buffer for the race result to label
|
||||||
// the connection type (P2P Direct vs Relay).
|
// the connection type (P2P Direct vs Relay).
|
||||||
// findLast: use the MOST RECENT event in case buffer has leftovers
|
// Use reverse search for MOST RECENT event (avoid stale data
|
||||||
const pathNeg = callDebugBuffer.findLast((e) => e.step === "connect:path_negotiated");
|
// from previous calls). Spread+reverse instead of findLast for
|
||||||
const engineOk = callDebugBuffer.findLast((e) => e.step === "connect:call_engine_started");
|
// WebView compatibility (findLast requires Chrome 97+).
|
||||||
|
const pathNeg = [...callDebugBuffer].reverse().find((e) => e.step === "connect:path_negotiated");
|
||||||
|
const engineOk = [...callDebugBuffer].reverse().find((e) => e.step === "connect:call_engine_started");
|
||||||
if (engineOk) {
|
if (engineOk) {
|
||||||
if (pathNeg?.details?.use_direct === true) {
|
if (pathNeg?.details?.use_direct === true) {
|
||||||
dcBadge.textContent = "P2P Direct";
|
dcBadge.textContent = "P2P Direct";
|
||||||
@@ -1692,6 +1694,7 @@ listen("signal-event", (event: any) => {
|
|||||||
quality: loadSettings().quality || "auto",
|
quality: loadSettings().quality || "auto",
|
||||||
peerDirectAddr: data.peer_direct_addr ?? null,
|
peerDirectAddr: data.peer_direct_addr ?? null,
|
||||||
peerLocalAddrs: data.peer_local_addrs ?? [],
|
peerLocalAddrs: data.peer_local_addrs ?? [],
|
||||||
|
peerMappedAddr: data.peer_mapped_addr ?? null,
|
||||||
});
|
});
|
||||||
showCallScreen();
|
showCallScreen();
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
|||||||
Reference in New Issue
Block a user