Implement conference breakouts with meeting mode and programme lineup UI.
Deploy Ladill Meet / deploy (push) Successful in 1m3s
Deploy Ladill Meet / deploy (push) Successful in 1m3s
Attendees reconnect to breakout rooms with publish access while hosts stay on stage; poll and media-token endpoints drive LiveKit reconnection, and the live room shows Events-linked programme when available. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -40,7 +40,10 @@ class BreakoutService
|
||||
]));
|
||||
}
|
||||
|
||||
$participants = $session->participants()->where('status', 'joined')->get();
|
||||
$participants = $session->participants()
|
||||
->where('status', 'joined')
|
||||
->whereNotIn('role', ['host', 'co_host'])
|
||||
->get();
|
||||
|
||||
if ($assignments) {
|
||||
foreach ($assignments as $assignment) {
|
||||
@@ -95,6 +98,34 @@ class BreakoutService
|
||||
BreakoutAssignment::whereIn('breakout_room_id', $session->breakoutRooms()->pluck('id'))->delete();
|
||||
}
|
||||
|
||||
public function hasActiveBreakouts(Session $session): bool
|
||||
{
|
||||
return $session->breakoutRooms()->where('status', 'open')->exists();
|
||||
}
|
||||
|
||||
public function closeExpired(Session $session): bool
|
||||
{
|
||||
if (! $session->breakoutRooms()->where('status', 'open')->where('closes_at', '<=', now())->exists()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->closeAll($session);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isInActiveBreakout(Participant $participant): bool
|
||||
{
|
||||
if (! $participant->breakout_room_id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return BreakoutRoom::query()
|
||||
->where('id', $participant->breakout_room_id)
|
||||
->where('status', 'open')
|
||||
->exists();
|
||||
}
|
||||
|
||||
public function mediaRoomForParticipant(Participant $participant): string
|
||||
{
|
||||
if ($participant->breakout_room_id) {
|
||||
|
||||
Reference in New Issue
Block a user