diff --git a/web/zebra-spaces.html b/web/zebra-spaces.html index d911724..892c79f 100644 --- a/web/zebra-spaces.html +++ b/web/zebra-spaces.html @@ -1667,9 +1667,13 @@ function attachSfuTrack(uuid, stream){ (t0 ? ' tr0={en='+t0.enabled+' mu='+t0.muted+' rs='+t0.readyState+'}' : '')); try { const p = a.play(); - if (p && p.catch) p.catch(e => logLine('err','rtc autoplay '+uuid.slice(0,4)+': '+e.message)); + if (p && p.catch) p.catch(e => { + logLine('err','rtc autoplay '+uuid.slice(0,4)+': '+e.message); + flagAudioBlocked('rtc autoplay '+uuid.slice(0,4)); + }); } catch(e){ logLine('err','rtc play threw '+uuid.slice(0,4)+': '+e.message); + flagAudioBlocked('rtc play threw '+uuid.slice(0,4)); } stopMeter(uuid); startMeter(uuid, stream); logLine('', 'sfu: receiving '+((members.get(uuid)||{}).handle || uuid)); @@ -3800,6 +3804,13 @@ async function handleSignal(raw){ * down our SFU + mesh PCs too so we actually stop hearing / * broadcasting — closing the WS alone leaves the WebRTC paths up. */ wantConnected = false; + /* Clear the active-call key so a hard-refresh / bfcache restore + * doesn't sneak the kicked user right back in via auto-rejoin. + * The confirm() text says "they can rejoin" — but that means + * MANUALLY (type the code, click enter), not automatically on + * any tab event. Fox 2026-06-04: "we have auto-join on the + * phone that is kicked just rejoins". */ + try { sessionStorage.removeItem(ACTIVE_CALL_KEY); } catch(_){} const noticeVerb = m.action === 'kick' ? 'kicked from' : m.action === 'ban' ? 'banned from' : 'removed from'; @@ -4269,19 +4280,49 @@ let selfListenerMode = false; function activateListenerAudio(){ /* Fire .play() on every existing