You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-29 16:43:09 +03:00
Handle m.call.* events which are decrypted asynchronously
Handle the case where received m.call.* events are not decrypted at the point of the 'event' notification by adding an 'Event.decrypted' listener for them.
This commit is contained in:
@@ -3053,6 +3053,10 @@ function setupCallEventHandler(client) {
|
|||||||
// now loop through the buffer chronologically and inject them
|
// now loop through the buffer chronologically and inject them
|
||||||
callEventBuffer.forEach(function(e) {
|
callEventBuffer.forEach(function(e) {
|
||||||
if (ignoreCallIds[e.getContent().call_id]) {
|
if (ignoreCallIds[e.getContent().call_id]) {
|
||||||
|
console.log(
|
||||||
|
'Ignoring previously answered/hungup call ' +
|
||||||
|
e.getContent().call_id,
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
callEventHandler(e);
|
callEventHandler(e);
|
||||||
@@ -3061,20 +3065,25 @@ function setupCallEventHandler(client) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on("event", function(event) {
|
client.on("event", onEvent);
|
||||||
if (!isClientPrepared) {
|
|
||||||
if (event.getType().indexOf("m.call.") === 0) {
|
function onEvent(event) {
|
||||||
callEventBuffer.push(event);
|
if (event.getType().indexOf("m.call.") !== 0) {
|
||||||
|
// not a call event
|
||||||
|
if (event.isBeingDecrypted() || event.isDecryptionFailure()) {
|
||||||
|
// not *yet* a call event, but might become one...
|
||||||
|
event.once("Event.decrypted", onEvent);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!isClientPrepared) {
|
||||||
|
callEventBuffer.push(event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
callEventHandler(event);
|
callEventHandler(event);
|
||||||
});
|
}
|
||||||
|
|
||||||
function callEventHandler(event) {
|
function callEventHandler(event) {
|
||||||
if (event.getType().indexOf("m.call.") !== 0) {
|
|
||||||
return; // not a call event
|
|
||||||
}
|
|
||||||
const content = event.getContent();
|
const content = event.getContent();
|
||||||
let call = content.call_id ? client.callList[content.call_id] : undefined;
|
let call = content.call_id ? client.callList[content.call_id] : undefined;
|
||||||
let i;
|
let i;
|
||||||
|
|||||||
Reference in New Issue
Block a user