From ac2e9a59f45223a5e81127e0c8068591336d9c43 Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Thu, 13 Mar 2025 13:48:00 +0100 Subject: [PATCH] frontend: Add numParticipants to OpenViduMeetRoom and update room creation logic --- backend/src/services/room.service.ts | 3 ++- frontend/src/app/pages/home/home.component.ts | 13 +++++++------ typings/src/room.ts | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/backend/src/services/room.service.ts b/backend/src/services/room.service.ts index d235446..246bdcc 100644 --- a/backend/src/services/room.service.ts +++ b/backend/src/services/room.service.ts @@ -214,13 +214,14 @@ export class RoomService { livekitRoom: Room, roomOptions: OpenViduMeetRoomOptions ): OpenViduMeetRoom { - const { name: roomName, creationTime } = livekitRoom; + const { name: roomName, creationTime, numParticipants } = livekitRoom; const { preferences, expirationDate, roomNamePrefix, maxParticipants } = roomOptions; const openviduRoom: OpenViduMeetRoom = { roomName, roomNamePrefix, creationDate: Number(creationTime) * 1000, + numParticipants, maxParticipants, expirationDate, moderatorRoomUrl: `${baseUrl}/${roomName}?secret=${secureUid(10)}`, diff --git a/frontend/src/app/pages/home/home.component.ts b/frontend/src/app/pages/home/home.component.ts index 032f668..eff763e 100644 --- a/frontend/src/app/pages/home/home.component.ts +++ b/frontend/src/app/pages/home/home.component.ts @@ -17,7 +17,7 @@ import { ActivatedRoute, Router } from '@angular/router'; import { Subscription } from 'rxjs'; // import { ConfigService } from '@app/services/config.service'; -import { HttpService, OpenViduMeetRoomOptions } from 'projects/shared-meet-components/src/public-api'; +import { HttpService, OpenViduMeetRoom, OpenViduMeetRoomOptions } from 'projects/shared-meet-components/src/public-api'; import packageInfo from '../../../../package.json'; @@ -145,14 +145,15 @@ export class HomeComponent implements OnInit, OnDestroy { expirationDate: Date.now() + 3600 }; - const room = await this.httpService.createRoom(options); + const room: OpenViduMeetRoom = await this.httpService.createRoom(options); this.roomForm.get('roomNamePrefix')?.setValue(roomNamePrefix); - // TODO: Should create a way of select the access role (moderator/participant) - const publisherUrl = new URL(room.publisherRoomUrl); - const secret = publisherUrl.searchParams.get('secret'); - const path = publisherUrl.pathname; + const isFirstParticipant = room.numParticipants === 0; + const accessRoomUrl = new URL(isFirstParticipant ? room.moderatorRoomUrl : room.publisherRoomUrl); + + const secret = accessRoomUrl.searchParams.get('secret'); + const path = accessRoomUrl.pathname; this.router.navigate([path], { queryParams: { secret } }); } catch (error) { console.error('Error creating room ', error); diff --git a/typings/src/room.ts b/typings/src/room.ts index bec3e51..4de918d 100644 --- a/typings/src/room.ts +++ b/typings/src/room.ts @@ -17,6 +17,7 @@ export type OpenViduMeetRoomOptions = BaseRoomOptions; export interface OpenViduMeetRoom extends BaseRoomOptions { roomName: string; creationDate: number; + numParticipants: number; moderatorRoomUrl: string; publisherRoomUrl: string; }