Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions plugins/love-resources/src/components/RoomPopup.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
import ShareScreenButton from './meeting/controls/ShareScreenButton.svelte'
import LeaveRoomButton from './meeting/controls/LeaveRoomButton.svelte'
import MeetingHeader from './meeting/MeetingHeader.svelte'
import { joinMeeting } from '../meetings'
import { joinMeeting, reconnectMeeting } from '../meetings'

export let room: Room

Expand All @@ -53,8 +53,14 @@

const dispatch = createEventDispatcher()

// A stale record (still "in" the room, but no LiveKit session - e.g. after
// a reload mid-call) must re-establish the media, not knock again.
async function connect (): Promise<void> {
await joinMeeting(room)
if (joined) {
await reconnectMeeting(room)
} else {
await joinMeeting(room)
}
dispatch('close')
}

Expand Down Expand Up @@ -121,7 +127,8 @@
{/if}
{#if joined}
<LeaveRoomButton {room} noLabel={false} size="medium" on:leave={() => dispatch('close')} />
{:else}
{/if}
{#if !joined || !$lkSessionConnected}
<ModernButton
icon={love.icon.EnterRoom}
label={love.string.EnterRoom}
Expand Down
15 changes: 15 additions & 0 deletions plugins/love-resources/src/meetings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,21 @@ export async function joinMeeting (room: Room): Promise<void> {
await connectToMeeting(room)
}

/**
* Re-establish the call for a room this client is already recorded in.
*
* After a reload mid-call the ParticipantInfo still points at the room while
* no LiveKit session exists, so `joinMeeting` (which would knock again) is
* the wrong entry point: the person is already in, only the media is gone.
*/
export async function reconnectMeeting (room: Room): Promise<void> {
if (get(myInfo)?.room !== room._id) {
await joinMeeting(room)
return
}
await connectToMeeting(room)
}

export async function joinOrCreateMeetingByInvite (roomId: Ref<Room>): Promise<void> {
if (currentMeetingRoom === roomId) return

Expand Down