Refactor LegacyCallHandler event emitter to use TypedEventEmitter (#29008)
* Switch LegacyCallHandler over to TypedEventEmitter and use emits to notify consumers of protocol support updates Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Add test for dialpad Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
committed by
GitHub
parent
13913ba8b2
commit
e5ca7954c8
@@ -10,7 +10,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { MatrixError, RuleId, TweakName, SyncState } from "matrix-js-sdk/src/matrix";
|
||||
import { MatrixError, RuleId, TweakName, SyncState, TypedEventEmitter } from "matrix-js-sdk/src/matrix";
|
||||
import {
|
||||
CallError,
|
||||
CallErrorCode,
|
||||
@@ -22,7 +22,6 @@ import {
|
||||
MatrixCall,
|
||||
} from "matrix-js-sdk/src/webrtc/call";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import EventEmitter from "events";
|
||||
import { PushProcessor } from "matrix-js-sdk/src/pushprocessor";
|
||||
import { CallEventHandlerEvent } from "matrix-js-sdk/src/webrtc/callEventHandler";
|
||||
|
||||
@@ -137,14 +136,23 @@ export enum LegacyCallHandlerEvent {
|
||||
CallChangeRoom = "call_change_room",
|
||||
SilencedCallsChanged = "silenced_calls_changed",
|
||||
CallState = "call_state",
|
||||
ProtocolSupport = "protocol_support",
|
||||
}
|
||||
|
||||
type EventEmitterMap = {
|
||||
[LegacyCallHandlerEvent.CallsChanged]: (calls: Map<string, MatrixCall>) => void;
|
||||
[LegacyCallHandlerEvent.CallChangeRoom]: (call: MatrixCall) => void;
|
||||
[LegacyCallHandlerEvent.SilencedCallsChanged]: (calls: Set<string>) => void;
|
||||
[LegacyCallHandlerEvent.CallState]: (mappedRoomId: string | null, status: CallState) => void;
|
||||
[LegacyCallHandlerEvent.ProtocolSupport]: () => void;
|
||||
};
|
||||
|
||||
/**
|
||||
* LegacyCallHandler manages all currently active calls. It should be used for
|
||||
* placing, answering, rejecting and hanging up calls. It also handles ringing,
|
||||
* PSTN support and other things.
|
||||
*/
|
||||
export default class LegacyCallHandler extends EventEmitter {
|
||||
export default class LegacyCallHandler extends TypedEventEmitter<LegacyCallHandlerEvent, EventEmitterMap> {
|
||||
private calls = new Map<string, MatrixCall>(); // roomId -> call
|
||||
// Calls started as an attended transfer, ie. with the intention of transferring another
|
||||
// call with a different party to this one.
|
||||
@@ -271,15 +279,13 @@ export default class LegacyCallHandler extends EventEmitter {
|
||||
this.supportsPstnProtocol = null;
|
||||
}
|
||||
|
||||
dis.dispatch({ action: Action.PstnSupportUpdated });
|
||||
|
||||
if (protocols[PROTOCOL_SIP_NATIVE] !== undefined && protocols[PROTOCOL_SIP_VIRTUAL] !== undefined) {
|
||||
this.supportsSipNativeVirtual = Boolean(
|
||||
protocols[PROTOCOL_SIP_NATIVE] && protocols[PROTOCOL_SIP_VIRTUAL],
|
||||
);
|
||||
}
|
||||
|
||||
dis.dispatch({ action: Action.VirtualRoomSupportUpdated });
|
||||
this.emit(LegacyCallHandlerEvent.ProtocolSupport);
|
||||
} catch (e) {
|
||||
if (maxTries === 1) {
|
||||
logger.log("Failed to check for protocol support and no retries remain: assuming no support", e);
|
||||
@@ -296,8 +302,8 @@ export default class LegacyCallHandler extends EventEmitter {
|
||||
return !!SdkConfig.getObject("voip")?.get("obey_asserted_identity");
|
||||
}
|
||||
|
||||
public getSupportsPstnProtocol(): boolean | null {
|
||||
return this.supportsPstnProtocol;
|
||||
public getSupportsPstnProtocol(): boolean {
|
||||
return this.supportsPstnProtocol ?? false;
|
||||
}
|
||||
|
||||
public getSupportsVirtualRooms(): boolean | null {
|
||||
@@ -568,6 +574,7 @@ export default class LegacyCallHandler extends EventEmitter {
|
||||
if (!mappedRoomId || !this.matchesCallForThisRoom(call)) return;
|
||||
|
||||
this.setCallState(call, newState);
|
||||
// XXX: this is used by the IPC into Electron to keep device awake
|
||||
dis.dispatch({
|
||||
action: "call_state",
|
||||
room_id: mappedRoomId,
|
||||
|
||||
Reference in New Issue
Block a user