diff --git a/plugins/love-resources/src/components/EditRoom.svelte b/plugins/love-resources/src/components/EditRoom.svelte index 4a5d3a0304..970cd09657 100644 --- a/plugins/love-resources/src/components/EditRoom.svelte +++ b/plugins/love-resources/src/components/EditRoom.svelte @@ -75,7 +75,13 @@ connectLabel = love.string.StartMeeting } - function showConnectionButton (object: Room, isConnected: boolean, myOffice?: Room, currentRoom?: Room): boolean { + function showConnectionButton ( + object: Room, + connecting: boolean, + isConnected: boolean, + myOffice?: Room, + currentRoom?: Room + ): boolean { // Do not show connect button in my office if (object._id === myOffice?._id) return false // Show during connecting with spinner @@ -98,7 +104,7 @@ focusIndex={1} /> - {#if showConnectionButton(object, $isConnected, $myOffice, $currentRoom)} + {#if showConnectionButton(object, connecting, $isConnected, $myOffice, $currentRoom)} {/if} diff --git a/plugins/love-resources/src/utils.ts b/plugins/love-resources/src/utils.ts index 1c3681f244..00c4a9e363 100644 --- a/plugins/love-resources/src/utils.ts +++ b/plugins/love-resources/src/utils.ts @@ -374,16 +374,12 @@ lk.on(RoomEvent.RecordingStatusChanged, (evt) => { isRecording.set(evt) }) lk.on(RoomEvent.RoomMetadataChanged, (metadata) => { - try { - const data = JSON.parse(metadata) as RoomMetadata - if (data.recording !== undefined) { - isRecording.set(data.recording) - } - if (data.transcription !== undefined) { - isTranscription.set(data.transcription === TranscriptionStatus.InProgress) - } - } catch (err: any) { - Analytics.handleError(err) + const data = parseMetadata(metadata) + if (data.recording !== undefined) { + isRecording.set(data.recording) + } + if (data.transcription !== undefined) { + isTranscription.set(data.transcription === TranscriptionStatus.InProgress) } }) @@ -392,7 +388,7 @@ lk.on(RoomEvent.Connected, () => { sendMessage({ type: 'connect', value: true }) isCurrentInstanceConnected.set(true) isRecording.set(lk.isRecording) - void initRoomMetadata(lk.metadata) + void initRoom() Analytics.handleEvent(LoveEvents.ConnectedToRoom) }) lk.on(RoomEvent.Disconnected, () => { @@ -402,25 +398,19 @@ lk.on(RoomEvent.Disconnected, () => { Analytics.handleEvent(LoveEvents.DisconnectedFromRoom) }) -async function initRoomMetadata (metadata: string | undefined): Promise { - let data: RoomMetadata - try { - data = metadata == null || metadata === '' ? {} : JSON.parse(metadata) - } catch (err: any) { - data = {} - Analytics.handleError(err) - } - - isTranscription.set(data.transcription === TranscriptionStatus.InProgress) - +async function initRoom (): Promise { const room = get(currentRoom) - const meetingMinutes = get(currentMeetingMinutes) - const isValidMeeting = - meetingMinutes != null && meetingMinutes.attachedTo === room?._id && meetingMinutes.status === MeetingStatus.Active - - if (room != null && !isValidMeeting) { + if (room !== undefined) { await initMeetingMinutes(room) } + await initRoomMetadata(lk.metadata) +} + +async function initRoomMetadata (metadata: string | undefined): Promise { + const room = get(currentRoom) + const data: RoomMetadata = parseMetadata(metadata) + + isTranscription.set(data.transcription === TranscriptionStatus.InProgress) if ( (data.transcription == null || data.transcription === TranscriptionStatus.Idle) && @@ -434,6 +424,15 @@ async function initRoomMetadata (metadata: string | undefined): Promise { } } +function parseMetadata (metadata: string | undefined): RoomMetadata { + try { + return metadata == null || metadata === '' ? {} : JSON.parse(metadata) + } catch (err: any) { + Analytics.handleError(err) + return {} + } +} + async function withRetries (fn: () => Promise, retries: number, delay: number): Promise { for (let attempt = 0; attempt < retries; attempt++) { try { @@ -738,7 +737,6 @@ export async function connectRoom ( 3, 1000 ) - await initMeetingMinutes(room) } catch (err) { console.error(err) await leaveRoom(currentInfo, get(myOffice))