playMedia only if necessary

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
Šimon Brandner 2021-07-29 08:45:32 +02:00
parent 537ce40f42
commit ae64765870
No known key found for this signature in database
GPG key ID: 55C211A1226CB17D

View file

@ -22,6 +22,7 @@ import { CallFeed, CallFeedEvent } from 'matrix-js-sdk/src/webrtc/callFeed';
import { logger } from 'matrix-js-sdk/src/logger'; import { logger } from 'matrix-js-sdk/src/logger';
import MemberAvatar from "../avatars/MemberAvatar"; import MemberAvatar from "../avatars/MemberAvatar";
import { replaceableComponent } from "../../../utils/replaceableComponent"; import { replaceableComponent } from "../../../utils/replaceableComponent";
import { objectHasDiff } from '../../../utils/objects';
interface IProps { interface IProps {
call: MatrixCall; call: MatrixCall;
@ -46,7 +47,6 @@ interface IState {
videoMuted: boolean; videoMuted: boolean;
} }
// TODO: We shouldn't be calling playMedia() all the time
@replaceableComponent("views.voip.VideoFeed") @replaceableComponent("views.voip.VideoFeed")
export default class VideoFeed extends React.PureComponent<IProps, IState> { export default class VideoFeed extends React.PureComponent<IProps, IState> {
private element: HTMLVideoElement; private element: HTMLVideoElement;
@ -69,8 +69,10 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
this.updateFeed(this.props.feed, null); this.updateFeed(this.props.feed, null);
} }
componentDidUpdate(prevProps: IProps) { componentDidUpdate(prevProps: IProps, prevState: IState) {
this.updateFeed(prevProps.feed, this.props.feed); this.updateFeed(prevProps.feed, this.props.feed);
// If the mutes state has changed, we try to playMedia()
if (prevState.videoMuted !== this.state.videoMuted) this.playMedia();
} }
static getDerivedStateFromProps(props: IProps) { static getDerivedStateFromProps(props: IProps) {
@ -142,7 +144,7 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
} }
private onNewStream = async () => { private onNewStream = async () => {
await this.setState({ this.setState({
audioMuted: this.props.feed.isAudioMuted(), audioMuted: this.props.feed.isAudioMuted(),
videoMuted: this.props.feed.isVideoMuted(), videoMuted: this.props.feed.isVideoMuted(),
}); });
@ -150,11 +152,10 @@ export default class VideoFeed extends React.PureComponent<IProps, IState> {
}; };
private onMuteStateChanged = async () => { private onMuteStateChanged = async () => {
await this.setState({ this.setState({
audioMuted: this.props.feed.isAudioMuted(), audioMuted: this.props.feed.isAudioMuted(),
videoMuted: this.props.feed.isVideoMuted(), videoMuted: this.props.feed.isVideoMuted(),
}); });
this.playMedia();
}; };
private onResize = (e) => { private onResize = (e) => {