dm calls mvp: phase 0: fix CallEmbed listener leak by caching bound refs in class fields
This commit is contained in:
parent
380a4d7d70
commit
30c59e199d
1 changed files with 16 additions and 8 deletions
|
|
@ -47,6 +47,14 @@ export class CallEmbed {
|
||||||
|
|
||||||
private readonly disposables: Array<() => void> = [];
|
private readonly disposables: Array<() => void> = [];
|
||||||
|
|
||||||
|
private readonly boundOnEvent = this.onEvent.bind(this);
|
||||||
|
|
||||||
|
private readonly boundOnEventDecrypted = this.onEventDecrypted.bind(this);
|
||||||
|
|
||||||
|
private readonly boundOnStateUpdate = this.onStateUpdate.bind(this);
|
||||||
|
|
||||||
|
private readonly boundOnToDeviceEvent = this.onToDeviceEvent.bind(this);
|
||||||
|
|
||||||
static getIntent(dm: boolean, ongoing: boolean): ElementCallIntent {
|
static getIntent(dm: boolean, ongoing: boolean): ElementCallIntent {
|
||||||
if (ongoing) {
|
if (ongoing) {
|
||||||
return dm ? ElementCallIntent.JoinExistingDM : ElementCallIntent.JoinExisting;
|
return dm ? ElementCallIntent.JoinExistingDM : ElementCallIntent.JoinExisting;
|
||||||
|
|
@ -212,10 +220,10 @@ export class CallEmbed {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Attach listeners for feeding events - the underlying widget classes handle permissions for us
|
// Attach listeners for feeding events - the underlying widget classes handle permissions for us
|
||||||
this.mx.on(ClientEvent.Event, this.onEvent.bind(this));
|
this.mx.on(ClientEvent.Event, this.boundOnEvent);
|
||||||
this.mx.on(MatrixEventEvent.Decrypted, this.onEventDecrypted.bind(this));
|
this.mx.on(MatrixEventEvent.Decrypted, this.boundOnEventDecrypted);
|
||||||
this.mx.on(RoomStateEvent.Events, this.onStateUpdate.bind(this));
|
this.mx.on(RoomStateEvent.Events, this.boundOnStateUpdate);
|
||||||
this.mx.on(ClientEvent.ToDeviceEvent, this.onToDeviceEvent.bind(this));
|
this.mx.on(ClientEvent.ToDeviceEvent, this.boundOnToDeviceEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -231,10 +239,10 @@ export class CallEmbed {
|
||||||
this.container.removeChild(this.iframe);
|
this.container.removeChild(this.iframe);
|
||||||
this.control.dispose();
|
this.control.dispose();
|
||||||
|
|
||||||
this.mx.off(ClientEvent.Event, this.onEvent.bind(this));
|
this.mx.off(ClientEvent.Event, this.boundOnEvent);
|
||||||
this.mx.off(MatrixEventEvent.Decrypted, this.onEventDecrypted.bind(this));
|
this.mx.off(MatrixEventEvent.Decrypted, this.boundOnEventDecrypted);
|
||||||
this.mx.off(RoomStateEvent.Events, this.onStateUpdate.bind(this));
|
this.mx.off(RoomStateEvent.Events, this.boundOnStateUpdate);
|
||||||
this.mx.off(ClientEvent.ToDeviceEvent, this.onToDeviceEvent.bind(this));
|
this.mx.off(ClientEvent.ToDeviceEvent, this.boundOnToDeviceEvent);
|
||||||
|
|
||||||
// Clear internal state
|
// Clear internal state
|
||||||
this.readUpToMap = {};
|
this.readUpToMap = {};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue