Cancel pending events in virtual room when call placed (#7583)
As the comment hopefully explains. Also add public qualifiers to the methods in Resend which lacked any visibility specifiers. Fixes https://github.com/vector-im/element-web/issues/17594
This commit is contained in:
parent
73a58705f6
commit
a7a7cb56fe
2 changed files with 17 additions and 4 deletions
|
@ -54,6 +54,7 @@ import { WidgetLayoutStore, Container } from './stores/widgets/WidgetLayoutStore
|
|||
import { getIncomingCallToastKey } from './toasts/IncomingCallToast';
|
||||
import ToastStore from './stores/ToastStore';
|
||||
import IncomingCallToast from "./toasts/IncomingCallToast";
|
||||
import Resend from './Resend';
|
||||
|
||||
export const PROTOCOL_PSTN = 'm.protocol.pstn';
|
||||
export const PROTOCOL_PSTN_PREFIXED = 'im.vector.protocol.pstn';
|
||||
|
@ -737,6 +738,18 @@ export default class CallHandler extends EventEmitter {
|
|||
const mappedRoomId = (await VoipUserMapper.sharedInstance().getOrCreateVirtualRoomForRoom(roomId)) || roomId;
|
||||
logger.debug("Mapped real room " + roomId + " to room ID " + mappedRoomId);
|
||||
|
||||
// If we're using a virtual room nd there are any events pending, try to resend them,
|
||||
// otherwise the call will fail and because its a virtual room, the user won't be able
|
||||
// to see it to either retry or clear the pending events. There will only be call events
|
||||
// in this queue, and since we're about to place a new call, they can only be events from
|
||||
// previous calls that are probably stale by now, so just cancel them.
|
||||
if (mappedRoomId !== roomId) {
|
||||
const mappedRoom = MatrixClientPeg.get().getRoom(mappedRoomId);
|
||||
if (mappedRoom.getPendingEvents().length > 0) {
|
||||
Resend.cancelUnsentEvents(mappedRoom);
|
||||
}
|
||||
}
|
||||
|
||||
const timeUntilTurnCresExpire = MatrixClientPeg.get().getTurnServersExpiry() - Date.now();
|
||||
logger.log("Current turn creds expire in " + timeUntilTurnCresExpire + " ms");
|
||||
const call = MatrixClientPeg.get().createCall(mappedRoomId);
|
||||
|
|
|
@ -22,7 +22,7 @@ import { MatrixClientPeg } from './MatrixClientPeg';
|
|||
import dis from './dispatcher/dispatcher';
|
||||
|
||||
export default class Resend {
|
||||
static resendUnsentEvents(room: Room): Promise<void[]> {
|
||||
public static resendUnsentEvents(room: Room): Promise<void[]> {
|
||||
return Promise.all(room.getPendingEvents().filter(function(ev: MatrixEvent) {
|
||||
return ev.status === EventStatus.NOT_SENT;
|
||||
}).map(function(event: MatrixEvent) {
|
||||
|
@ -30,7 +30,7 @@ export default class Resend {
|
|||
}));
|
||||
}
|
||||
|
||||
static cancelUnsentEvents(room: Room): void {
|
||||
public static cancelUnsentEvents(room: Room): void {
|
||||
room.getPendingEvents().filter(function(ev: MatrixEvent) {
|
||||
return ev.status === EventStatus.NOT_SENT;
|
||||
}).forEach(function(event: MatrixEvent) {
|
||||
|
@ -38,7 +38,7 @@ export default class Resend {
|
|||
});
|
||||
}
|
||||
|
||||
static resend(event: MatrixEvent): Promise<void> {
|
||||
public static resend(event: MatrixEvent): Promise<void> {
|
||||
const room = MatrixClientPeg.get().getRoom(event.getRoomId());
|
||||
return MatrixClientPeg.get().resendEvent(event, room).then(function(res) {
|
||||
dis.dispatch({
|
||||
|
@ -52,7 +52,7 @@ export default class Resend {
|
|||
});
|
||||
}
|
||||
|
||||
static removeFromQueue(event: MatrixEvent): void {
|
||||
public static removeFromQueue(event: MatrixEvent): void {
|
||||
MatrixClientPeg.get().cancelPendingEvent(event);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue