Handle local events for voice broadcasts (#9561)
This commit is contained in:
parent
848adfdc10
commit
7fbdd8bb5d
4 changed files with 51 additions and 8 deletions
|
@ -129,12 +129,8 @@ export class VoiceBroadcastPlayback
|
|||
}
|
||||
|
||||
private addChunkEvent = async (event: MatrixEvent): Promise<boolean> => {
|
||||
const eventId = event.getId();
|
||||
|
||||
if (!eventId
|
||||
|| eventId.startsWith("~!") // don't add local events
|
||||
|| event.getContent()?.msgtype !== MsgType.Audio // don't add non-audio event
|
||||
) {
|
||||
if (event.getContent()?.msgtype !== MsgType.Audio) {
|
||||
// skip non-audio event
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,9 +50,12 @@ export class VoiceBroadcastChunkEvents {
|
|||
}
|
||||
|
||||
public includes(event: MatrixEvent): boolean {
|
||||
return !!this.events.find(e => e.getId() === event.getId());
|
||||
return !!this.events.find(e => this.equalByTxnIdOrId(event, e));
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {number} Length in milliseconds
|
||||
*/
|
||||
public getLength(): number {
|
||||
return this.events.reduce((length: number, event: MatrixEvent) => {
|
||||
return length + this.calculateChunkLength(event);
|
||||
|
@ -93,11 +96,16 @@ export class VoiceBroadcastChunkEvents {
|
|||
}
|
||||
|
||||
private addOrReplaceEvent = (event: MatrixEvent): boolean => {
|
||||
this.events = this.events.filter(e => e.getId() !== event.getId());
|
||||
this.events = this.events.filter(e => !this.equalByTxnIdOrId(event, e));
|
||||
this.events.push(event);
|
||||
return true;
|
||||
};
|
||||
|
||||
private equalByTxnIdOrId(eventA: MatrixEvent, eventB: MatrixEvent): boolean {
|
||||
return eventA.getTxnId() && eventB.getTxnId() && eventA.getTxnId() === eventB.getTxnId()
|
||||
|| eventA.getId() === eventB.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort by sequence, if available for all events.
|
||||
* Else fall back to timestamp.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue