From cc23e829b21d1c00f8b26ee769d7fd0a773aacdc Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Tue, 14 Apr 2026 18:13:45 +0400 Subject: [PATCH] =?UTF-8?q?feat(ui):=20handle=20PresenceList=20in=20lobby?= =?UTF-8?q?=20=E2=80=94=20show=20online=20users?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lobby now populates from PresenceList signal events: - Relay broadcasts user list on register/deregister - JS receives "presence_list" signal-event - Updates lobbyUsers map (excluding self) - Renders user rows with identicon, name, fingerprint Users appear in the lobby as soon as they register their signal channel — no need to join voice first. Co-Authored-By: Claude Opus 4.6 (1M context) --- desktop/src/main.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/desktop/src/main.ts b/desktop/src/main.ts index 516922f..5860d3d 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -435,6 +435,20 @@ async function pollStatus() { listen("signal-event", (event: any) => { const data = event.payload; switch (data.type) { + case "presence_list": + // Relay sent updated user list + lobbyUsers.clear(); + for (const u of data.users || []) { + if (u.fingerprint === myFingerprint) continue; // don't show self + lobbyUsers.set(u.fingerprint, { + fingerprint: u.fingerprint, + alias: u.alias || null, + inVoice: false, + speaking: false, + }); + } + renderLobbyUsers(); + break; case "ringing": // We placed a call, it's ringing break;