Compare commits

...

3 Commits

Author SHA1 Message Date
Hugh Nimmo-Smith
b58bc80021 Merge branch 'livekit' into hughns/fix-performance-bug-display-name-observable 2025-03-10 11:24:55 +00:00
Hugh Nimmo-Smith
4cc7365ffb Additional comments 2025-03-07 08:02:55 +00:00
Hugh Nimmo-Smith
5d2e5e38e2 Use share() on fromEvent() so that we multiplex subscribers onto the event emitter 2025-03-06 22:47:57 +01:00

View File

@@ -40,6 +40,7 @@ import {
of,
race,
scan,
share,
skip,
startWith,
switchAll,
@@ -464,6 +465,26 @@ export class CallViewModel extends ViewModel {
},
);
/**
* Observable for changes to the MatrixRTCSession membership list.
*
* We do this to ensure that we only listen once to the event and then share internally.
*/
private readonly membershipsChanged$ = fromEvent(
this.matrixRTCSession,
MatrixRTCSessionEvent.MembershipsChanged,
).pipe(share());
/**
* Observable for changes to the Matrix Room member data.
*
* We do this to ensure that we only listen once to the event and then share internally.
*/
private readonly roomMembers$ = fromEvent(
this.matrixRTCSession.room,
RoomStateEvent.Members,
).pipe(share());
/**
* Displaynames for each member of the call. This will disambiguate
* any displaynames that clashes with another member. Only members
@@ -471,9 +492,9 @@ export class CallViewModel extends ViewModel {
*/
public readonly memberDisplaynames$ = merge(
// Handle call membership changes.
fromEvent(this.matrixRTCSession, MatrixRTCSessionEvent.MembershipsChanged),
this.membershipsChanged$,
// Handle room membership changes (and displayname updates)
fromEvent(this.matrixRTCSession.room, RoomStateEvent.Members),
this.roomMembers$,
).pipe(
startWith(null),
map(() => {
@@ -512,10 +533,7 @@ export class CallViewModel extends ViewModel {
// Also react to changes in the MatrixRTC session list.
// The session list will also be update if a room membership changes.
// No additional RoomState event listener needs to be set up.
fromEvent(
this.matrixRTCSession,
MatrixRTCSessionEvent.MembershipsChanged,
).pipe(startWith(null)),
this.membershipsChanged$.pipe(startWith(null)),
showNonMemberTiles.value$,
]).pipe(
scan(