Repository navigation
Remember pre-join choices between meetings - #76
Merged
Merged
Conversation
Join saves the guest's name, camera and microphone, and whether each was on, in localStorage; the next pre-join starts from them. Signed-in hosts keep the session name. A remembered device is matched by id, then by label (ids can rotate between sessions), then falls back to the first device. Closes Convex-Works#4
mah3uz
marked this pull request as ready for review
October 31, 2026 14:34
A camera or microphone that fails turns its toggle off. Saving that on Join made one failure stick: later meetings started with the camera off, or muted. Only a toggle the guest used is saved now. CI also runs this spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #4.
Pre-join now remembers the guest's display name, camera, microphone, and whether each was on, and prefills them on the next visit to any meeting.
web/src/lib/rtc/prejoinPrefs.tskeeps the choices inlocalStorageundertide:prejoin:v1. Every storage access is wrapped, so a browser without storage just gets today's blank pre-join.{ id, label }and matched by deviceId, then by exact label, then the first device as before. Safari, and Firefox without a persisted permission, can give the same device a new id each session, so the label is the second chance. A remembered device that is gone falls back to the default silently.PreJoin.sveltechanges by a few lines: it reads the prefs once, starts the camera and microphone toggles from them, usespickDevicewhere it used to take the first device, and writes on Join.Test
e2e/prejoin-prefs.spec.tscovers a round trip (a name, a non-default camera and microphone, the camera off, then a prefilled visit to another room), nothing saved without Join, an unplugged device falling back with no alert, a rotated deviceId matched by label, and a host keeping the session name. With the label match removed, the rotation spec fails.make checkpasses. The other specs that drive pre-join (device-errors, anonymous, new-room, meeting-chrome) pass.lobby.spec.tsneeds the Dex stack, which wasn't running locally, so it wasn't exercised. Not run: the media suites, and real Safari or Firefox id rotation, which the spec only simulates with fake devices in Chromium.🤖 Generated with Claude Code