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}
|
size={120}
|
||||||
radius={120}
|
radius={120}
|
||||||
mx="auto"
|
mx="auto"
|
||||||
bg={'#fff'}
|
bg={avatars.length > 0 ? '#fff' : undefined}
|
||||||
name={props.title.trim() || props.publicKey}
|
name={props.title.trim() || props.publicKey}
|
||||||
color={'initials'}
|
color={'initials'}
|
||||||
src={avatars.length > 0 ?
|
src={avatars.length > 0 ?
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
const mutedRef = useRef<boolean>(false);
|
const mutedRef = useRef<boolean>(false);
|
||||||
const soundRef = useRef<boolean>(true);
|
const soundRef = useRef<boolean>(true);
|
||||||
const {sendMessage} = useDeattachedSender();
|
const {sendMessage} = useDeattachedSender();
|
||||||
|
const hasRemoteTrackRef = useRef<boolean>(false);
|
||||||
|
|
||||||
const {playSound, stopSound, stopLoopSound} = useSound();
|
const {playSound, stopSound, stopLoopSound} = useSound();
|
||||||
const {setWindowPriority} = useWindow();
|
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);
|
setWindowPriority(true);
|
||||||
playSound("ringtone.mp3", true);
|
playSound("ringtone.mp3", true);
|
||||||
setActiveCall(packet.getSrc());
|
setActiveCall(packet.getSrc());
|
||||||
@@ -293,8 +306,19 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
setCallState(CallState.WEB_RTC_EXCHANGE);
|
setCallState(CallState.WEB_RTC_EXCHANGE);
|
||||||
}
|
}
|
||||||
if(signalType == SignalType.CREATE_ROOM) {
|
if(signalType == SignalType.CREATE_ROOM) {
|
||||||
|
if(!sessionKeys){
|
||||||
|
/**
|
||||||
|
* Сервер может отправить CREATE_ROOM сигнал, даже если мы приняли звонок на другом устройстве, по этому проверяем,
|
||||||
|
* на этом ли устройстве звонок принят посредством проверки наличия сгенерированных ключей шифрования
|
||||||
|
*/
|
||||||
|
stopLoopSound();
|
||||||
|
stopSound();
|
||||||
|
end();
|
||||||
|
return;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Создана комната для обмена WebRTC потоками
|
* Создана комната для обмена WebRTC потоками, но такое событие сервер может отправить даже если звонок
|
||||||
|
* был принят с другого устройства, по этому проверяем, наш ли звонок
|
||||||
*/
|
*/
|
||||||
roomIdRef.current = packet.getRoomId();
|
roomIdRef.current = packet.getRoomId();
|
||||||
info("WebRTC room created with id: " + packet.getRoomId());
|
info("WebRTC room created with id: " + packet.getRoomId());
|
||||||
@@ -327,10 +351,7 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
* WebRTC соединение установлено, звонок активен, останавливаем все остальные звуки
|
* WebRTC соединение установлено, звонок активен, останавливаем все остальные звуки
|
||||||
* системы
|
* системы
|
||||||
*/
|
*/
|
||||||
stopLoopSound();
|
tryActivateCall();
|
||||||
stopSound();
|
|
||||||
|
|
||||||
setCallState(CallState.ACTIVE);
|
|
||||||
info("WebRTC connection established, call is active");
|
info("WebRTC connection established, call is active");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -345,7 +366,8 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
* При получении медиа-трека с другой стороны
|
* При получении медиа-трека с другой стороны
|
||||||
*/
|
*/
|
||||||
if(remoteAudioRef.current && event.streams[0]){
|
if(remoteAudioRef.current && event.streams[0]){
|
||||||
console.info(event.streams);
|
hasRemoteTrackRef.current = true;
|
||||||
|
tryActivateCall();
|
||||||
remoteAudioRef.current.srcObject = event.streams[0];
|
remoteAudioRef.current.srcObject = event.streams[0];
|
||||||
remoteAudioRef.current.muted = !soundRef.current;
|
remoteAudioRef.current.muted = !soundRef.current;
|
||||||
void remoteAudioRef.current.play().catch((e) => {
|
void remoteAudioRef.current.play().catch((e) => {
|
||||||
@@ -382,6 +404,15 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
}
|
}
|
||||||
}, [activeCall, sessionKeys, duration]);
|
}, [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) => {
|
const openCallsModal = (text : string) => {
|
||||||
modals.open({
|
modals.open({
|
||||||
centered: true,
|
centered: true,
|
||||||
@@ -443,8 +474,7 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
/**
|
/**
|
||||||
* Только если звонок был активен воспроизводим звуки
|
* Только если звонок был активен воспроизводим звуки
|
||||||
*/
|
*/
|
||||||
stopLoopSound();
|
playSound("end_call.mp3");
|
||||||
stopSound();
|
|
||||||
}
|
}
|
||||||
if (remoteAudioRef.current) {
|
if (remoteAudioRef.current) {
|
||||||
remoteAudioRef.current.pause();
|
remoteAudioRef.current.pause();
|
||||||
@@ -454,7 +484,6 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
setDuration(0);
|
setDuration(0);
|
||||||
durationIntervalRef.current && clearInterval(durationIntervalRef.current);
|
durationIntervalRef.current && clearInterval(durationIntervalRef.current);
|
||||||
setWindowPriority(false);
|
setWindowPriority(false);
|
||||||
playSound("end_call.mp3");
|
|
||||||
peerConnectionRef.current?.close();
|
peerConnectionRef.current?.close();
|
||||||
peerConnectionRef.current = null;
|
peerConnectionRef.current = null;
|
||||||
roomIdRef.current = "";
|
roomIdRef.current = "";
|
||||||
@@ -467,6 +496,8 @@ export function CallProvider(props : CallProviderProps) {
|
|||||||
setDuration(0);
|
setDuration(0);
|
||||||
setMutedState(false);
|
setMutedState(false);
|
||||||
setSoundState(true);
|
setSoundState(true);
|
||||||
|
stopLoopSound();
|
||||||
|
stopSound();
|
||||||
roleRef.current = null;
|
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 CORE_MIN_REQUIRED_VERSION = "1.5.5";
|
||||||
|
|
||||||
export const RELEASE_NOTICE = `
|
export const RELEASE_NOTICE = `
|
||||||
**Обновление v1.1.6** :emoji_1f631:
|
**Обновление v1.1.7** :emoji_1f631:
|
||||||
- Исправлена ошибка, из-за которой системные звуки могли продолжать проигрываться при активном звонке.
|
- Исправлен цвет аватарки при ее отсутствии в профиле
|
||||||
- Исправлена ошибка при множественном выборе сообщений для их пересылки.
|
- Исправлены встречные звонки (состояние гонки)
|
||||||
|
- Защита от принятия уже принятого звонка
|
||||||
|
- Исправление системных звуков при звонках
|
||||||
|
- Время звонка начинается с момента фактического установления соединения с собеседником, а не с момента принятия звонка
|
||||||
`;
|
`;
|
||||||
Reference in New Issue
Block a user