Compare commits
5 Commits
8fbfb4fa5c
...
7b3dd6c566
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b3dd6c566 | ||
|
|
70af076248 | ||
|
|
92c9dc03c9 | ||
|
|
7e8d086a74 | ||
|
|
0a0c810105 |
@@ -60,7 +60,7 @@ export function ActionAvatar(props : ActionAvatarProps) {
|
||||
size={120}
|
||||
radius={120}
|
||||
mx="auto"
|
||||
bg={'#fff'}
|
||||
bg={avatars.length > 0 ? '#fff' : undefined}
|
||||
name={props.title.trim() || props.publicKey}
|
||||
color={'initials'}
|
||||
src={avatars.length > 0 ?
|
||||
|
||||
@@ -84,6 +84,7 @@ export function CallProvider(props : CallProviderProps) {
|
||||
const mutedRef = useRef<boolean>(false);
|
||||
const soundRef = useRef<boolean>(true);
|
||||
const {sendMessage} = useDeattachedSender();
|
||||
const hasRemoteTrackRef = useRef<boolean>(false);
|
||||
|
||||
const {playSound, stopSound, stopLoopSound} = useSound();
|
||||
const {setWindowPriority} = useWindow();
|
||||
@@ -231,6 +232,18 @@ export function CallProvider(props : CallProviderProps) {
|
||||
/**
|
||||
* Нам поступает звонок
|
||||
*/
|
||||
if(callState != CallState.ENDED){
|
||||
/**
|
||||
* У нас уже есть активный звонок, отправляем сигнал другой стороне, что линия занята
|
||||
*/
|
||||
let busySignal = new PacketSignalPeer();
|
||||
busySignal.setSrc(publicKey);
|
||||
busySignal.setDst(packet.getSrc());
|
||||
busySignal.setSignalType(SignalType.END_CALL_BECAUSE_BUSY);
|
||||
send(busySignal);
|
||||
info("Received incoming call from " + packet.getSrc() + " but we are already on a call, sent busy signal");
|
||||
return;
|
||||
}
|
||||
setWindowPriority(true);
|
||||
playSound("ringtone.mp3", true);
|
||||
setActiveCall(packet.getSrc());
|
||||
@@ -293,8 +306,19 @@ export function CallProvider(props : CallProviderProps) {
|
||||
setCallState(CallState.WEB_RTC_EXCHANGE);
|
||||
}
|
||||
if(signalType == SignalType.CREATE_ROOM) {
|
||||
if(!sessionKeys){
|
||||
/**
|
||||
* Сервер может отправить CREATE_ROOM сигнал, даже если мы приняли звонок на другом устройстве, по этому проверяем,
|
||||
* на этом ли устройстве звонок принят посредством проверки наличия сгенерированных ключей шифрования
|
||||
*/
|
||||
stopLoopSound();
|
||||
stopSound();
|
||||
end();
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Создана комната для обмена WebRTC потоками
|
||||
* Создана комната для обмена WebRTC потоками, но такое событие сервер может отправить даже если звонок
|
||||
* был принят с другого устройства, по этому проверяем, наш ли звонок
|
||||
*/
|
||||
roomIdRef.current = packet.getRoomId();
|
||||
info("WebRTC room created with id: " + packet.getRoomId());
|
||||
@@ -327,10 +351,7 @@ export function CallProvider(props : CallProviderProps) {
|
||||
* WebRTC соединение установлено, звонок активен, останавливаем все остальные звуки
|
||||
* системы
|
||||
*/
|
||||
stopLoopSound();
|
||||
stopSound();
|
||||
|
||||
setCallState(CallState.ACTIVE);
|
||||
tryActivateCall();
|
||||
info("WebRTC connection established, call is active");
|
||||
}
|
||||
}
|
||||
@@ -345,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) => {
|
||||
@@ -382,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,
|
||||
@@ -443,8 +474,7 @@ export function CallProvider(props : CallProviderProps) {
|
||||
/**
|
||||
* Только если звонок был активен воспроизводим звуки
|
||||
*/
|
||||
stopLoopSound();
|
||||
stopSound();
|
||||
playSound("end_call.mp3");
|
||||
}
|
||||
if (remoteAudioRef.current) {
|
||||
remoteAudioRef.current.pause();
|
||||
@@ -454,7 +484,6 @@ export function CallProvider(props : CallProviderProps) {
|
||||
setDuration(0);
|
||||
durationIntervalRef.current && clearInterval(durationIntervalRef.current);
|
||||
setWindowPriority(false);
|
||||
playSound("end_call.mp3");
|
||||
peerConnectionRef.current?.close();
|
||||
peerConnectionRef.current = null;
|
||||
roomIdRef.current = "";
|
||||
@@ -467,6 +496,8 @@ export function CallProvider(props : CallProviderProps) {
|
||||
setDuration(0);
|
||||
setMutedState(false);
|
||||
setSoundState(true);
|
||||
stopLoopSound();
|
||||
stopSound();
|
||||
roleRef.current = null;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
export const APP_VERSION = "1.1.6";
|
||||
export const APP_VERSION = "1.1.7";
|
||||
export const CORE_MIN_REQUIRED_VERSION = "1.5.5";
|
||||
|
||||
export const RELEASE_NOTICE = `
|
||||
**Обновление v1.1.6** :emoji_1f631:
|
||||
- Исправлена ошибка, из-за которой системные звуки могли продолжать проигрываться при активном звонке.
|
||||
- Исправлена ошибка при множественном выборе сообщений для их пересылки.
|
||||
**Обновление v1.1.7** :emoji_1f631:
|
||||
- Исправлен цвет аватарки при ее отсутствии в профиле
|
||||
- Исправлены встречные звонки (состояние гонки)
|
||||
- Защита от принятия уже принятого звонка
|
||||
- Исправление системных звуков при звонках
|
||||
- Время звонка начинается с момента фактического установления соединения с собеседником, а не с момента принятия звонка
|
||||
`;
|
||||
Reference in New Issue
Block a user