@@ -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,27 @@ 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 onMembershipUpdate or onRoomMembershipUpdate 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 ( ) ;
763+ } ;
764+ public onRoomMemberUpdate = ( ) : void => {
765+ this . recalculateSessionMembers ( ) ;
766+ } ;
767+ public onRTCSessionMemberUpdate = ( ) : void => {
768+ this . recalculateSessionMembers ( ) ;
763769 } ;
764770
765771 /**
772+ * Call this when anything that could impact rtc memberships has changed: Room Members or RTC members.
773+ *
766774 * Examines the latest call memberships and handles any encryption key sending or rotation that is needed.
767775 *
768776 * This function should be called when the room members or call memberships might have changed.
769777 */
770- public onMembershipsUpdate = ( ) : void => {
778+ private recalculateSessionMembers = ( ) : void => {
771779 const oldMemberships = this . memberships ;
772780 this . memberships = MatrixRTCSession . callMembershipsForRoom ( this . room ) ;
773781
@@ -781,7 +789,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
781789 logger . info ( `Memberships for call in room ${ this . room . roomId } have changed: emitting` ) ;
782790 this . emit ( MatrixRTCSessionEvent . MembershipsChanged , oldMemberships , this . memberships ) ;
783791
784- this . membershipManager ?. onMembershipsUpdate ( this . memberships ) ;
792+ this . membershipManager ?. onRTCSessionMemberUpdate ( this . memberships ) ;
785793 }
786794
787795 if ( this . manageMediaKeys && this . isJoined ( ) ) {
0 commit comments