Skip to content

Commit ebbd669

Browse files
davidzhaolukasIO
andauthored
Room.isRecording to surface if the room is being recorded (#412)
* Room.isRecording to surface if the room is being recorded. * changeset * use getter pattern * add recording event Co-authored-by: Lukas <[email protected]>
1 parent 782ed42 commit ebbd669

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

.changeset/kind-roses-live.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'livekit-client': patch
3+
---
4+
5+
Expose Room.isRecording to indicate if the Room is being recorded

src/room/Room.ts

+18
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
101101
/** options of room */
102102
options: InternalRoomOptions;
103103

104+
private _isRecording: boolean = false;
105+
104106
private identityToSid: Map<string, string>;
105107

106108
/** connect options of room */
@@ -332,6 +334,10 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
332334
this.name = joinResponse.room!.name;
333335
this.sid = joinResponse.room!.sid;
334336
this.metadata = joinResponse.room!.metadata;
337+
if (this._isRecording !== joinResponse.room!.activeRecording) {
338+
this._isRecording = joinResponse.room!.activeRecording;
339+
this.emit(RoomEvent.RecordingStatusChanged, joinResponse.room!.activeRecording);
340+
}
335341
this.emit(RoomEvent.SignalConnected);
336342
} catch (err) {
337343
this.recreateEngine();
@@ -424,6 +430,13 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
424430
this.connectFuture = undefined;
425431
}
426432

433+
/**
434+
* if the current room has a participant with `recorder: true` in its JWT grant
435+
**/
436+
get isRecording() {
437+
return this._isRecording;
438+
}
439+
427440
/**
428441
* @internal for testing
429442
*/
@@ -951,6 +964,10 @@ class Room extends (EventEmitter as new () => TypedEmitter<RoomEventCallbacks>)
951964

952965
private handleRoomUpdate = (r: RoomModel) => {
953966
this.metadata = r.metadata;
967+
if (this._isRecording !== r.activeRecording) {
968+
this._isRecording = r.activeRecording;
969+
this.emit(RoomEvent.RecordingStatusChanged, r.activeRecording);
970+
}
954971
this.emitWhenConnected(RoomEvent.RoomMetadataChanged, r.metadata);
955972
};
956973

@@ -1273,4 +1290,5 @@ export type RoomEventCallbacks = {
12731290
) => void;
12741291
audioPlaybackChanged: (playing: boolean) => void;
12751292
signalConnected: () => void;
1293+
recordingStatusChanged: (recording: boolean) => void;
12761294
};

src/room/events.ts

+5
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,11 @@ export enum RoomEvent {
250250
* Signal connected, can publish tracks.
251251
*/
252252
SignalConnected = 'signalConnected',
253+
254+
/**
255+
* Recording of a room has started/stopped.
256+
*/
257+
RecordingStatusChanged = 'recordingStatusChanged',
253258
}
254259

255260
export enum ParticipantEvent {

0 commit comments

Comments
 (0)