1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-25 05:23:13 +03:00

Fix sending call member events on leave (#3799)

https://github.com/matrix-org/matrix-js-sdk/pull/3756 changed
the membership update function to await on the next call, but this
meant it never returned and therefore never cleared
`updateCallMembershipRunning`. We therefore didn't send the updated
call member event when leaving, instead sending it whenever the next
poll interval arrived.

This changes it to only await if we are retrying, not if we're just
scheduling the next poll.

Fixes https://github.com/vector-im/element-call/issues/1763
This commit is contained in:
David Baker
2023-10-17 14:26:18 +01:00
committed by GitHub
parent 884bd2585a
commit 4ce837b20e

View File

@@ -427,7 +427,6 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
memberships: this.makeNewMemberships(memberships, myCallMemberEvent, myPrevMembership), memberships: this.makeNewMemberships(memberships, myCallMemberEvent, myPrevMembership),
}; };
let resendDelay = 0;
try { try {
await this.client.sendStateEvent( await this.client.sendStateEvent(
this.room.roomId, this.room.roomId,
@@ -438,13 +437,12 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
logger.info(`Sent updated call member event.`); logger.info(`Sent updated call member event.`);
// check periodically to see if we need to refresh our member event // check periodically to see if we need to refresh our member event
if (this.isJoined()) resendDelay = MEMBER_EVENT_CHECK_PERIOD; if (this.isJoined()) {
this.memberEventTimeout = setTimeout(this.triggerCallMembershipEventUpdate, MEMBER_EVENT_CHECK_PERIOD);
}
} catch (e) { } catch (e) {
resendDelay = CALL_MEMBER_EVENT_RETRY_DELAY_MIN + Math.random() * 2000; const resendDelay = CALL_MEMBER_EVENT_RETRY_DELAY_MIN + Math.random() * 2000;
logger.warn(`Failed to send call member event: retrying in ${resendDelay}`); logger.warn(`Failed to send call member event: retrying in ${resendDelay}`);
}
if (resendDelay) {
await new Promise((resolve) => setTimeout(resolve, resendDelay)); await new Promise((resolve) => setTimeout(resolve, resendDelay));
await this.triggerCallMembershipEventUpdate(); await this.triggerCallMembershipEventUpdate();
} }