@@ -29,7 +29,7 @@ import { decodeBase64, encodeUnpaddedBase64 } from "../base64.ts";
2929import { KnownMembership } from "../@types/membership.ts" ;
3030import { MatrixError , safeGetRetryAfterMs } from "../http-api/errors.ts" ;
3131import { MatrixEvent } from "../models/event.ts" ;
32- import { MembershipManager , MembershipManagerInterface } from "./MembershipManager.ts" ;
32+ import { LegacyMembershipManager , IMembershipManager } from "./MembershipManager.ts" ;
3333
3434const logger = rootLogger . getChild ( "MatrixRTCSession" ) ;
3535
@@ -132,7 +132,7 @@ export type JoinSessionConfig = MembershipConfig & EncryptionConfig;
132132 * This class doesn't deal with media at all, just membership & properties of a session.
133133 */
134134export class MatrixRTCSession extends TypedEventEmitter < MatrixRTCSessionEvent , MatrixRTCSessionEventHandlerMap > {
135- private membershipManager ?: MembershipManagerInterface ;
135+ private membershipManager ?: IMembershipManager ;
136136
137137 // The session Id of the call, this is the call_id of the call Member event.
138138 private _callId : string | undefined ;
@@ -284,7 +284,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
284284 this . _callId = memberships [ 0 ] ?. callId ;
285285 const roomState = this . room . getLiveTimeline ( ) . getState ( EventTimeline . FORWARDS ) ;
286286 // TODO: double check if this is actually needed. Should be covered by refreshRoom in MatrixRTCSessionManager
287- roomState ?. on ( RoomStateEvent . Members , this . onMembershipsUpdate ) ;
287+ roomState ?. on ( RoomStateEvent . Members , this . onRoomMemberUpdate ) ;
288288 this . setExpiryTimer ( ) ;
289289 }
290290
@@ -306,7 +306,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
306306 this . expiryTimeout = undefined ;
307307 }
308308 const roomState = this . room . getLiveTimeline ( ) . getState ( EventTimeline . FORWARDS ) ;
309- roomState ?. off ( RoomStateEvent . Members , this . onMembershipsUpdate ) ;
309+ roomState ?. off ( RoomStateEvent . Members , this . onRoomMemberUpdate ) ;
310310 }
311311
312312 /**
@@ -329,7 +329,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
329329 logger . info ( `Already joined to session in room ${ this . room . roomId } : ignoring join call` ) ;
330330 return ;
331331 } else {
332- this . membershipManager = new MembershipManager ( joinConfig , this . room , this . client , ( ) =>
332+ this . membershipManager = new LegacyMembershipManager ( joinConfig , this . room , this . client , ( ) =>
333333 this . getOldestMembership ( ) ,
334334 ) ;
335335 }
@@ -652,7 +652,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
652652 }
653653
654654 if ( soonestExpiry != undefined ) {
655- this . expiryTimeout = setTimeout ( this . onMembershipsUpdate , soonestExpiry ) ;
655+ this . expiryTimeout = setTimeout ( this . onRTCSessionMemberUpdate , soonestExpiry ) ;
656656 }
657657 }
658658
@@ -755,19 +755,35 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
755755 m . sender === this . client . getUserId ( ) && m . deviceId === this . client . getDeviceId ( ) ;
756756
757757 /**
758- * @deprecated use onMembershipsUpdate instead. this should be called when any membership in the call is updated
758+ * @deprecated use onRoomMemberUpdate or onRTCSessionMemberUpdate instead. this should be called when any membership in the call is updated
759759 * the old name might have implied to only need to call this when your own membership changes.
760760 */
761761 public onMembershipUpdate = ( ) : void => {
762- this . onMembershipsUpdate ( ) ;
762+ this . recalculateSessionMembers ( ) ;
763763 } ;
764764
765765 /**
766+ * Call this when the room members have changed.
767+ */
768+ public onRoomMemberUpdate = ( ) : void => {
769+ this . recalculateSessionMembers ( ) ;
770+ } ;
771+
772+ /**
773+ * Call this when sth changed that impacts the current rtc members in this session.
774+ */
775+ public onRTCSessionMemberUpdate = ( ) : void => {
776+ this . recalculateSessionMembers ( ) ;
777+ } ;
778+
779+ /**
780+ * Call this when anything that could impact rtc memberships has changed: Room Members or RTC members.
781+ *
766782 * Examines the latest call memberships and handles any encryption key sending or rotation that is needed.
767783 *
768784 * This function should be called when the room members or call memberships might have changed.
769785 */
770- public onMembershipsUpdate = ( ) : void => {
786+ private recalculateSessionMembers = ( ) : void => {
771787 const oldMemberships = this . memberships ;
772788 this . memberships = MatrixRTCSession . callMembershipsForRoom ( this . room ) ;
773789
@@ -781,7 +797,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
781797 logger . info ( `Memberships for call in room ${ this . room . roomId } have changed: emitting` ) ;
782798 this . emit ( MatrixRTCSessionEvent . MembershipsChanged , oldMemberships , this . memberships ) ;
783799
784- this . membershipManager ?. onMembershipsUpdate ( this . memberships ) ;
800+ this . membershipManager ?. onRTCSessionMemberUpdate ( this . memberships ) ;
785801 }
786802
787803 if ( this . manageMediaKeys && this . isJoined ( ) ) {
0 commit comments