You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
3 years ago
|
import { useEffect, useState } from 'react';
|
||
|
import { useSelector } from 'react-redux';
|
||
|
// tslint:disable-next-line: no-submodule-imports
|
||
|
import useMountedState from 'react-use/lib/useMountedState';
|
||
|
import { CallManager } from '../session/utils';
|
||
|
import { CallManagerOptionsType, InputItem } from '../session/utils/CallManager';
|
||
|
import {
|
||
|
getCallIsInFullScreen,
|
||
|
getHasOngoingCallWithPubkey,
|
||
|
getSelectedConversationKey,
|
||
|
} from '../state/selectors/conversations';
|
||
|
|
||
|
export function useVideoCallEventsListener(uniqueId: string) {
|
||
|
const selectedConversationKey = useSelector(getSelectedConversationKey);
|
||
|
const ongoingCallPubkey = useSelector(getHasOngoingCallWithPubkey);
|
||
|
const isFullScreen = useSelector(getCallIsInFullScreen);
|
||
|
|
||
|
const [localStream, setLocalStream] = useState<MediaStream | null>(null);
|
||
|
const [remoteStream, setRemoteStream] = useState<MediaStream | null>(null);
|
||
|
const [localStreamVideoIsMuted, setLocalStreamVideoIsMuted] = useState(true);
|
||
|
const [ourAudioIsMuted, setOurAudioIsMuted] = useState(false);
|
||
|
const [remoteStreamVideoIsMuted, setRemoteStreamVideoIsMuted] = useState(true);
|
||
|
const mountedState = useMountedState();
|
||
|
|
||
|
const [currentConnectedCameras, setCurrentConnectedCameras] = useState<Array<InputItem>>([]);
|
||
|
const [currentConnectedAudioInputs, setCurrentConnectedAudioInputs] = useState<Array<InputItem>>(
|
||
|
[]
|
||
|
);
|
||
|
useEffect(() => {
|
||
|
if (ongoingCallPubkey === selectedConversationKey) {
|
||
|
CallManager.addVideoEventsListener(uniqueId, (options: CallManagerOptionsType) => {
|
||
|
const {
|
||
|
audioInputsList,
|
||
|
camerasList,
|
||
|
isLocalVideoStreamMuted,
|
||
|
isRemoteVideoStreamMuted,
|
||
|
localStream: lLocalStream,
|
||
|
remoteStream: lRemoteStream,
|
||
|
isAudioMuted,
|
||
|
} = options;
|
||
|
if (mountedState()) {
|
||
|
setLocalStream(lLocalStream);
|
||
|
setRemoteStream(lRemoteStream);
|
||
|
setRemoteStreamVideoIsMuted(isRemoteVideoStreamMuted);
|
||
|
setLocalStreamVideoIsMuted(isLocalVideoStreamMuted);
|
||
|
setOurAudioIsMuted(isAudioMuted);
|
||
|
|
||
|
setCurrentConnectedCameras(camerasList);
|
||
|
setCurrentConnectedAudioInputs(audioInputsList);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return () => {
|
||
|
CallManager.removeVideoEventsListener(uniqueId);
|
||
|
};
|
||
|
}, [ongoingCallPubkey, selectedConversationKey, isFullScreen]);
|
||
|
|
||
|
return {
|
||
|
currentConnectedAudioInputs,
|
||
|
currentConnectedCameras,
|
||
|
localStreamVideoIsMuted,
|
||
|
remoteStreamVideoIsMuted,
|
||
|
localStream,
|
||
|
remoteStream,
|
||
|
isAudioMuted: ourAudioIsMuted,
|
||
|
};
|
||
|
}
|