Compare commits

...

5 Commits

3 changed files with 48 additions and 14 deletions

View File

@@ -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 ?

View File

@@ -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;
}

View File

@@ -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:
- Исправлен цвет аватарки при ее отсутствии в профиле
- Исправлены встречные звонки (состояние гонки)
- Защита от принятия уже принятого звонка
- Исправление системных звуков при звонках
- Время звонка начинается с момента фактического установления соединения с собеседником, а не с момента принятия звонка
`;