fix: resolve LiveKit voice/video stability issues

- Guard Disconnected/ConnectionStateChanged event handlers against stale rooms:
  old room events no longer nuke the new room's state (root cause of buttons
  failing, mute getting stuck, DUPLICATE_IDENTITY cascades)
- Reset media state (isMuted/isCameraOn/isScreenSharing) on connect to prevent
  desync after reconnects
- Add voiceStates to WS ready payload so users see who's in voice on page load
- Wire VoiceControls buttons to check getActiveRoom() before SDK calls
- Guard ChannelSidebar against re-joining the same voice channel
- Switch LIVEKIT_URL to wss://nova.ddns.net/livekit for HTTPS secure context
  (required for getUserMedia in Safari)
This commit is contained in:
Jannis Braun
2026-02-18 07:52:25 +01:00
parent 5ef502f2e3
commit 4f65ea9c86
27 changed files with 573 additions and 143 deletions
+2
View File
@@ -61,6 +61,7 @@ export const api = {
delete: (id) => request('DELETE', `/servers/${id}`),
invite: (id) => request('POST', `/servers/${id}/invite`),
join: (id, data) => request('POST', `/servers/${id}/join`, data),
joinByCode: (inviteCode) => request('POST', '/servers/join', { inviteCode }),
members: (id) => request('GET', `/servers/${id}/members`),
updateMember: (serverId, userId, data) => request('PATCH', `/servers/${serverId}/members/${userId}`, data),
removeMember: (serverId, userId) => request('DELETE', `/servers/${serverId}/members/${userId}`),
@@ -105,6 +106,7 @@ export const api = {
sendRequest: (username) => request('POST', '/social/requests', { username }),
updateRequest: (id, status) => request('PATCH', `/social/requests/${id}`, { status }),
removeFriend: (id) => request('DELETE', `/social/friends/${id}`),
cancelRequest: (id) => request('DELETE', `/social/requests/${id}`),
search: (q) => request('GET', `/social/search?q=${encodeURIComponent(q)}`),
},
livekit: {