fix(calls): the call bar shows "Call disconnected" and reconnects when sync is back (#318) #418

Merged
jared merged 6 commits from fix/call-disconnected-bar into lotus 2026-10-19 12:42:08 -04:00
Owner

Fixes #318 (host half; the fork half is element-call#50, released in 0.25.0-lotus.25 and pinned here).

After a homeserver stall Element Call showed "Connection lost · Reconnect", while Lotus's call bar still looked joined, with mute/deafen/soundboard controls that did nothing.

Change

  • CallControl handles the fork's io.lotus.call_error { code, recoverable } / { code: null } (parsing in the unit-tested parseCallError).
  • The call bar shows "Call disconnected" (role="alert"), with a Reconnect button when recoverable. The button sends io.lotus.reconnect, which presses the frame's own Reconnect.
  • useReconnectWhenSynced: once sync is back after a drop, it reconnects automatically, once per drop.
  • Pins @lotusguild/element-call-embedded@0.25.0-lotus.25. That release also contains element-call#54, which keeps the call through stalls shorter than the server's leave window, plus #45, #47 and #43.

Verified with the published lotus.25, in a call with Synapse frozen (SIGSTOP):

  • Local config (18 s leave delay): the frame shows "Connection lost" at 40 s, and the call bar shows "Call disconnected" at the same moment. After SIGCONT it rejoins by itself within 5 s.
  • Production config (60 s): a 40 s stall no longer drops the call at all (element-call#54).

tsc clean · unit tests pass · ESLint clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5

Fixes #318 (host half; the fork half is element-call#50, released in **0.25.0-lotus.25** and pinned here). After a homeserver stall Element Call showed **"Connection lost · Reconnect"**, while Lotus's call bar still looked joined, with mute/deafen/soundboard controls that did nothing. **Change** - `CallControl` handles the fork's `io.lotus.call_error { code, recoverable }` / `{ code: null }` (parsing in the unit-tested `parseCallError`). - The call bar shows **"Call disconnected"** (`role="alert"`), with a **Reconnect** button when recoverable. The button sends `io.lotus.reconnect`, which presses the frame's own Reconnect. - `useReconnectWhenSynced`: once sync is back after a drop, it reconnects automatically, once per drop. - Pins `@lotusguild/element-call-embedded@0.25.0-lotus.25`. That release also contains element-call#54, which keeps the call through stalls shorter than the server's leave window, plus #45, #47 and #43. **Verified** with the published lotus.25, in a call with Synapse frozen (`SIGSTOP`): - Local config (18 s leave delay): the frame shows "Connection lost" at 40 s, and the call bar shows **"Call disconnected" at the same moment**. After `SIGCONT` it **rejoins by itself within 5 s**. - Production config (60 s): a 40 s stall no longer drops the call at all (element-call#54). `tsc` clean · unit tests pass · ESLint clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared added 3 commits 2026-10-18 15:42:37 -04:00
After a homeserver stall Element Call showed "Connection lost" while the
call bar still looked joined. Handle the fork's io.lotus.call_error:
show "Call disconnected" with a Reconnect button (io.lotus.reconnect),
and reconnect automatically once sync is back.

Fixes #318

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
# Conflicts:
#	src/app/components/CallEmbedProvider.tsx
chore(call): pin element-call-embedded 0.25.0-lotus.25 (call_error / reconnect, #318)
CI / Build & Quality Checks (pull_request) Failing after 2m51s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 11s
6648ca928d
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared added 1 commit 2026-10-18 23:40:52 -04:00
Merge branch 'lotus' into fix/call-disconnected-bar
CI / Build & Quality Checks (pull_request) Successful in 3m3s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 9s
CI / Playwright smoke (e2e) (pull_request) Successful in 20m15s
2a9b7f68b7
jared added 2 commits 2026-10-19 12:15:26 -04:00
# Conflicts:
#	package-lock.json
#	package.json
#	src/app/plugins/call/CallControl.ts
#	src/app/plugins/call/CallEmbed.ts
Merge remote-tracking branch 'origin/fix/call-disconnected-bar' into fix/call-disconnected-bar
CI / Build & Quality Checks (pull_request) Successful in 1m52s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 12s
CI / Playwright smoke (e2e) (pull_request) Successful in 11m13s
968507b4b1
jared merged commit aaf75fe74a into lotus 2026-10-19 12:42:08 -04:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#418