You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-09 10:22:46 +03:00
Be specific about what is considered a MSC4143 call member event. (#4328)
* Be specific about what is considered a MSC4143 call member event. * review * check for empty event first * Optimize for new session type events If its a session type event we do not want to run two "key in" checks. We expect legacy events to be the less comment type going forward. * awkward but necessary key count optimization
This commit is contained in:
@@ -160,26 +160,27 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
|
|||||||
const callMemberships: CallMembership[] = [];
|
const callMemberships: CallMembership[] = [];
|
||||||
for (const memberEvent of callMemberEvents) {
|
for (const memberEvent of callMemberEvents) {
|
||||||
const content = memberEvent.getContent();
|
const content = memberEvent.getContent();
|
||||||
|
const eventKeysCount = Object.keys(content).length;
|
||||||
|
// Dont even bother about empty events (saves us from costly type/"key in" checks in bigger rooms)
|
||||||
|
if (eventKeysCount === 0) continue;
|
||||||
|
|
||||||
let membershipContents: any[] = [];
|
let membershipContents: any[] = [];
|
||||||
|
|
||||||
// We first decide if its a MSC4143 event (per device state key)
|
// We first decide if its a MSC4143 event (per device state key)
|
||||||
if ("memberships" in content) {
|
if (eventKeysCount > 1 && "focus_active" in content) {
|
||||||
|
// We have a MSC4143 event membership event
|
||||||
|
membershipContents.push(content);
|
||||||
|
} else if (eventKeysCount === 1 && "memberships" in content) {
|
||||||
// we have a legacy (one event for all devices) event
|
// we have a legacy (one event for all devices) event
|
||||||
if (!Array.isArray(content["memberships"])) {
|
if (!Array.isArray(content["memberships"])) {
|
||||||
logger.warn(`Malformed member event from ${memberEvent.getSender()}: memberships is not an array`);
|
logger.warn(`Malformed member event from ${memberEvent.getSender()}: memberships is not an array`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
membershipContents = content["memberships"];
|
membershipContents = content["memberships"];
|
||||||
} else {
|
|
||||||
// We have a MSC4143 event membership event
|
|
||||||
if (Object.keys(content).length !== 0) {
|
|
||||||
// We checked for empty content to not try to construct CallMembership's with {}.
|
|
||||||
membershipContents.push(content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (membershipContents.length === 0) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (membershipContents.length === 0) continue;
|
||||||
|
|
||||||
for (const membershipData of membershipContents) {
|
for (const membershipData of membershipContents) {
|
||||||
try {
|
try {
|
||||||
const membership = new CallMembership(memberEvent, membershipData);
|
const membership = new CallMembership(memberEvent, membershipData);
|
||||||
|
Reference in New Issue
Block a user