From 8e6040ad6f8ec31c9a908cea4d86e5fc4b51dc1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 27 Jul 2021 14:23:58 +0200 Subject: [PATCH] Give CallFeed a mute state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/webrtc/callFeed.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/webrtc/callFeed.ts b/src/webrtc/callFeed.ts index 69d6170ab..085291b8c 100644 --- a/src/webrtc/callFeed.ts +++ b/src/webrtc/callFeed.ts @@ -21,6 +21,7 @@ import { RoomMember } from "../models/room-member"; export enum CallFeedEvent { NewStream = "new_stream", + MuteStateChanged = "mute_state_changed" } export class CallFeed extends EventEmitter { @@ -30,6 +31,8 @@ export class CallFeed extends EventEmitter { public purpose: SDPStreamMetadataPurpose, private client: MatrixClient, private roomId: string, + private audioMuted?: boolean, + private videoMuted?: boolean, ) { super(); } @@ -51,15 +54,13 @@ export class CallFeed extends EventEmitter { return this.userId === this.client.getUserId(); } - // TODO: The two following methods should be later replaced - // by something that will also check if the remote is muted /** * Returns true if audio is muted or if there are no audio * tracks, otherwise returns false * @returns {boolean} is audio muted? */ public isAudioMuted(): boolean { - return this.stream.getAudioTracks().length === 0; + return this.stream.getAudioTracks().length === 0 || this.audioMuted; } /** @@ -69,7 +70,7 @@ export class CallFeed extends EventEmitter { */ public isVideoMuted(): boolean { // We assume only one video track - return this.stream.getVideoTracks().length === 0; + return this.stream.getVideoTracks().length === 0 || this.videoMuted; } /** @@ -81,4 +82,14 @@ export class CallFeed extends EventEmitter { this.stream = newStream; this.emit(CallFeedEvent.NewStream, this.stream); } + + public setAudioMuted(muted: boolean): void { + this.audioMuted = muted; + this.emit(CallFeedEvent.MuteStateChanged, this.audioMuted, this.videoMuted); + } + + public setVideoMuted(muted: boolean): void { + this.videoMuted = muted; + this.emit(CallFeedEvent.MuteStateChanged, this.audioMuted, this.videoMuted); + } }