fix(calls): the call-bar output menu uses the call frame's devices (#310) #417

Merged
jared merged 4 commits from fix/audio-output-frame-ids into lotus 2026-10-19 01:13:20 -04:00
Owner

Fixes #310 (with element-call#49, released as 0.25.0-lotus.24 and pinned here).

The call-bar audio output menu listed the chat page's devices, but browsers hash deviceId per frame/origin, so those ids mean nothing inside the call iframe. Picking "Headset" saved an unknown id in Element Call, which fell back to the default output, while the menu showed a ✓ on the device you picked.

Change

  • CallControl handles the fork's io.lotus.audio_output_state { deviceId, available: [{id, label}] }, which also silences the fork's "host did not ack" log on every change. A unit-tested parseAudioOutputState does the parsing.
  • AudioOutputButton builds the menu from the fork's list and effective selection. With older forks it falls back to the old list.
  • Pins @lotusguild/element-call-embedded@0.25.0-lotus.24.

Verified with the published lotus.24 (Chromium fake devices):

  • The menu shows the frame's outputs.
  • Picking "Fake Audio Output 2" makes Element Call save that frame device.
  • The ✓ follows it, and there are 0 no-ack warnings.

This also covers the audio-output half of #260.

tsc clean · unit tests pass · ESLint clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5

Fixes #310 (with element-call#49, released as **0.25.0-lotus.24** and pinned here). The call-bar audio output menu listed the **chat page's** devices, but browsers hash `deviceId` per frame/origin, so those ids mean nothing inside the call iframe. Picking "Headset" saved an unknown id in Element Call, which fell back to the default output, while the menu showed a ✓ on the device you picked. **Change** - `CallControl` handles the fork's `io.lotus.audio_output_state { deviceId, available: [{id, label}] }`, which also silences the fork's "host did not ack" log on every change. A unit-tested `parseAudioOutputState` does the parsing. - `AudioOutputButton` builds the menu from the **fork's** list and effective selection. With older forks it falls back to the old list. - Pins `@lotusguild/element-call-embedded@0.25.0-lotus.24`. **Verified** with the published lotus.24 (Chromium fake devices): - The menu shows the frame's outputs. - Picking "Fake Audio Output 2" makes Element Call save that **frame** device. - The ✓ follows it, and there are 0 no-ack warnings. This also covers the audio-output half of #260. `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:26:46 -04:00
deviceIds are hashed per frame/origin, so the ids the menu got from the
chat page's enumerateDevices() were unknown inside the call iframe: the
fork fell back to the default output while the menu showed a tick on
the chosen device. Handle io.lotus.audio_output_state (also silencing
the fork's "host did not ack" log) and build the menu from the fork's
list and effective selection; older forks fall back to the old list.

Fixes #310

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
chore(call): pin element-call-embedded 0.25.0-lotus.24 (frame audio outputs, #310)
CI / Build & Quality Checks (pull_request) Failing after 2m49s
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 14s
338b24c43f
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:50 -04:00
Merge branch 'lotus' into fix/audio-output-frame-ids
CI / Build & Quality Checks (pull_request) Successful in 1m51s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 10s
CI / Playwright smoke (e2e) (pull_request) Successful in 12m56s
2815767d47
jared merged commit a937831e6b into lotus 2026-10-19 01:13:20 -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#417