From 92c9dc03c94e56c249bc2847ba0715e16088badd Mon Sep 17 00:00:00 2001 From: RoyceDa Date: Wed, 1 Apr 2026 16:28:41 +0200 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=80=D0=B5=D0=BC=D1=8F=20=D0=B7=D0=B2?= =?UTF-8?q?=D0=BE=D0=BD=D0=BA=D0=B0=20=D0=BD=D0=B0=D1=87=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=B3=D0=B4=D0=B0,=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BD=D0=B0=D1=87=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B0=D1=83=D0=B4=D0=B8=D0=BE?= =?UTF-8?q?-=D0=B4=D0=BE=D1=80=D0=BE=D0=B6=D0=BA=D0=B0,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D1=82=D0=BE=D0=B3=D0=B4=D0=B0,=20=D0=BA=D0=BE=D0=B3?= =?UTF-8?q?=D0=B4=D0=B0=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=20SFU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/providers/CallProvider/CallProvider.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/providers/CallProvider/CallProvider.tsx b/app/providers/CallProvider/CallProvider.tsx index f109cf3..572a122 100644 --- a/app/providers/CallProvider/CallProvider.tsx +++ b/app/providers/CallProvider/CallProvider.tsx @@ -84,6 +84,7 @@ export function CallProvider(props : CallProviderProps) { const mutedRef = useRef(false); const soundRef = useRef(true); const {sendMessage} = useDeattachedSender(); + const hasRemoteTrackRef = useRef(false); const {playSound, stopSound, stopLoopSound} = useSound(); const {setWindowPriority} = useWindow(); @@ -350,10 +351,7 @@ export function CallProvider(props : CallProviderProps) { * WebRTC соединение установлено, звонок активен, останавливаем все остальные звуки * системы */ - stopLoopSound(); - stopSound(); - - setCallState(CallState.ACTIVE); + tryActivateCall(); info("WebRTC connection established, call is active"); } } @@ -368,7 +366,8 @@ export function CallProvider(props : CallProviderProps) { * При получении медиа-трека с другой стороны */ if(remoteAudioRef.current && event.streams[0]){ - console.info(event.streams); + hasRemoteTrackRef.current = true; + tryActivateCall(); remoteAudioRef.current.srcObject = event.streams[0]; remoteAudioRef.current.muted = !soundRef.current; void remoteAudioRef.current.play().catch((e) => { @@ -405,6 +404,15 @@ export function CallProvider(props : CallProviderProps) { } }, [activeCall, sessionKeys, duration]); + const tryActivateCall = () => { + if(hasRemoteTrackRef.current && peerConnectionRef.current?.connectionState == "connected"){ + stopLoopSound(); + stopSound(); + setCallState(CallState.ACTIVE); + info("Call is now active"); + } + } + const openCallsModal = (text : string) => { modals.open({ centered: true,