From 08251a761dcd6d5e804b95075ef46d6af1c984ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Tue, 27 Apr 2021 10:58:32 +0200 Subject: [PATCH] Add AudioFeedArrayForCall MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- .../views/voip/AudioFeedArrayForCall.tsx | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/components/views/voip/AudioFeedArrayForCall.tsx diff --git a/src/components/views/voip/AudioFeedArrayForCall.tsx b/src/components/views/voip/AudioFeedArrayForCall.tsx new file mode 100644 index 0000000000..fac2a22dcd --- /dev/null +++ b/src/components/views/voip/AudioFeedArrayForCall.tsx @@ -0,0 +1,73 @@ +/* +Copyright 2021 Šimon Brandner + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from "react"; +import AudioFeed from "./AudioFeed" +import { CallEvent, MatrixCall } from "matrix-js-sdk/src/webrtc/call"; +import { CallFeed } from "matrix-js-sdk/src/webrtc/callFeed"; + +interface IProps { + call: MatrixCall; +} + +interface IState { + feeds: Array; + onHold: boolean; +} + +export default class AudioFeedArrayForCall extends React.Component { + constructor(props: IProps) { + super(props); + + this.state = { + feeds: [], + onHold: false, + }; + } + + componentDidMount() { + this.props.call.addListener(CallEvent.FeedsChanged, this.onFeedsChanged); + this.props.call.addListener(CallEvent.HoldUnhold, this.onHoldUnhold); + } + + componentWillUnmount() { + this.props.call.removeListener(CallEvent.FeedsChanged, this.onFeedsChanged); + this.props.call.removeListener(CallEvent.HoldUnhold, this.onHoldUnhold); + } + + onFeedsChanged = () => { + this.setState({ + feeds: this.props.call.getRemoteFeeds(), + }); + } + + onHoldUnhold = (onHold: boolean) => { + this.setState({onHold: onHold}); + } + + render() { + // If we are onHold don't render any audio elements + if (this.state.onHold) return null; + + const feeds = this.state.feeds.map((feed, i) => { + return ( + + ); + }); + + return feeds; + } +}