1
0
Fork 0
mirror of https://github.com/DanielnetoDotCom/YouPHPTube synced 2025-10-03 17:59:55 +02:00
Oinktube/plugin/YPTSocket/caller.js

394 lines
No EOL
12 KiB
JavaScript

var callerToast = [];
var callingTimeoutSeconds = 30;
function getCallJsonFromUser(to_users_id, to_identification) {
var json = {
to_users_id: to_users_id,
to_identification: to_identification,
to_socketResourceId: false,
from_users_id: my_users_id,
from_identification: my_identification,
from_socketResourceId: socketResourceId
};
return json;
}
function callNow(to_users_id, to_identification) {
var timeout;
if ($('body').hasClass('calling')) {
avideoToastError('Please finish the call first');
return false;
} else if (!users_id_online.length) {
timeout = 1000;
avideoToastInfo('Please wait ...');
} else {
timeout = 1;
}
setTimeout(function () {
if (!isUserOnline(to_users_id)) {
avideoToastError('User is not online anymore');
console.log('User is not online anymore', users_id_online);
return false;
} else {
avideoToastSuccess('Calling ...');
setCallBodyClass('calling');
}
var json = getCallJsonFromUser(to_users_id, to_identification);
console.log('callNow', json);
sendSocketMessageToUser(json, 'incomeCall', to_users_id);
}, timeout);
//incomeCall(json);
}
function callUserNow(to_users_id) {
avideoModalIframeFull(webSiteRootURL + 'plugin/YPTSocket/callUser.php?users_id='+to_users_id);
return false;
}
function isJsonReceivingCall(json) {
if (json.from_users_id != my_users_id) {
// is receiving a call
return true;
} else {
return false;
}
}
function incomeCall(json) {
if (isJsonReceivingCall(json)) {
setCallBodyClass('callIncoming');
users_id = json.from_users_id;
userIdentification = json.from_identification;
} else {
setCallBodyClass('calling');
users_id = json.to_users_id;
userIdentification = json.to_identification;
}
if (!isUserOnline(users_id)) {
avideoToastError('A user called you but he is not online anymore');
return false;
}
if (typeof callerToast[users_id] !== 'undefined') {
console.log('incomeCall callerToast already active', users_id);
return false;
}
imageAndButton = getImageAndButton(json);
callerToast[users_id] = $.toast({
heading: userIdentification,
text: imageAndButton,
hideAfter: (callingTimeoutSeconds * 1000),
showHideTransition: 'slide',
//position: 'top-right',
textAlign: 'center',
afterHidden: function () {
setCallBodyClass('notCalling');
console.log('incomeCall afterHidden', users_id, shouldHangUpCall);
if (shouldHangUpCall) {
finishCall(json);
}
shouldHangUpCall = 1;
callerToast[users_id] = null;
delete callerToast[users_id];
}
});
console.log('incomeCall', users_id, callerToast[users_id]);
}
function getImageAndButton(json) {
if (isJsonReceivingCall(json)) {
users_id = json.from_users_id;
} else {
users_id = json.to_users_id;
}
var imageAndButton = '';
json.playCallBusySound = 0;
imageAndButton += '<center>';
imageAndButton += '<img src="' + webSiteRootURL + 'user/' + users_id + '/foto.png" class="img img-circle img-responsive incomeCallImage glowBox">';
imageAndButton += '</center>';
imageAndButton += '<div class="clearfix"></div>';
imageAndButton += '<button class="btn btn-danger btn-circle incomeCallBtn" onclick=\'hangUpCall(' + JSON.stringify(json) + ')\'><i class="fas fa-phone-slash"></i></button>';
if (isJsonReceivingCall(json)) {
imageAndButton += '<button class="btn btn-success btn-circle incomeCallBtn" onclick=\'acceptCall(' + JSON.stringify(json) + ')\'><i class="fas fa-phone"></i></button>';
}
return imageAndButton;
}
var shouldHangUpCall = 1;
function hangUpCall(json) {
if (isJsonReceivingCall(json)) {
users_id = json.from_users_id;
} else {
users_id = json.to_users_id;
}
if (isCallerToastActive(users_id)) {
console.log('hangUpCall callerToast', users_id);
shouldHangUpCall = 1;
closeCallerToast(users_id);
} else if ($('body').hasClass('calling')) {
avideoToastWarning('Hangup');
console.log('hangUpCall page', users_id);
}
setCallBodyClass('notCalling');
if (json.playCallBusySound) {
playCallBusySound();
}
}
function finishCall(json) {
if (isJsonReceivingCall(json)) {
users_id = json.from_users_id;
json.playCallBusySound = 1;
} else {
users_id = json.to_users_id;
}
if (isCallerToastActive(users_id)) {
console.log('finishCall', users_id);
sendSocketMessageToUser(json, 'hangUpCall', users_id);
var obj = {users_id: users_id, shouldHangUpCall: 0};
sendSocketMessageToUser(obj, 'hideCall', my_users_id);
avideoToastWarning('Finished');
} else {
console.log('finishCall ERRRO', users_id);
}
}
function acceptCall(json) {
stopAllAudio();
users_id = json.from_users_id;
if (!isUserOnline(users_id)) {
avideoToastError('The is not online anymore');
return false;
}
if (isCallerToastActive(users_id)) {
console.log('acceptCall', users_id);
var obj = {users_id: users_id, shouldHangUpCall: 0};
hideCall(obj);
modal.showPleaseWait();
if (!json.to_socketResourceId) {
json.to_socketResourceId = socketResourceId;
}
setTimeout(function () {
sendSocketMessageToResourceId(json, 'callAccepted', json.from_socketResourceId);
sendSocketMessageToUser(obj, 'hideCall', my_users_id);
}, 1000);
} else {
if(typeof callerToast[users_id] !== 'object'){
console.log('acceptCall ERROR callerToast[users_id] !== object', users_id);
}
if(typeof callerToast[users_id].close !== 'function'){
console.log('typeof callerToast[users_id].close !== function', users_id);
}
}
}
function hideCall(obj) {
console.log('hideCall', obj);
users_id = obj.users_id;
shouldHangUpCall = obj.shouldHangUpCall;
if (isCallerToastActive(users_id)) {
closeCallerToast(users_id);
}
setTimeout(function () {
shouldHangUpCall = 1;
}, 1000)
}
function callAccepted(json) {
users_id = json.to_users_id;
if (isCallerToastActive(users_id)) {
console.log('callAccepted callerToast', users_id);
obj = {users_id: users_id, shouldHangUpCall: 0};
hideCall(obj);
} else {
setCallBodyClass('calling');
console.log('callAccepted page', users_id);
}
stopAllAudio();
startMeetForCall(json);
}
function startMeetForCall(json) {
modal.showPleaseWait();
var randomPass = parseInt(Math.random() * 100000);
if (!isUserOnline(json.to_users_id)) {
avideoToastError('Start a call fail, the user is not oline anymore');
return false;
}
$.ajax({
url: webSiteRootURL + 'plugin/API/set.json.php?APIName=meet',
method: 'POST',
data: {
'public': 1,
'RoomPasswordNew': randomPass,
'RoomTopic': 'Call from ' + json.from_users_id + ' to ' + json.to_users_id
},
success: function (response) {
console.log('startMeetForCall', response);
if (!isUserOnline(json.to_users_id)) {
avideoToastError('Start a call fail (2), the user is not oline anymore');
return false;
}
if (response.error) {
hangUpCall(json);
avideoAlertError(response.message);
sendSocketMessageToUser(users_id, 'hideCallPleaseWait', false);
sendSocketMessageToUser(my_users_id, 'hideCallPleaseWait', false);
modal.hidePleaseWait();
} else {
console.log('startMeetForCall', json, response);
setTimeout(function () {
openMeetLink(response.linkAndPassword);
sendSocketMessageToResourceId(response.linkAndPassword, 'openMeetLink', json.to_socketResourceId);
}, 1000);
}
}
});
}
var callModalIFrameClosedInterval;
function openMeetLink(linkAndPassword) {
setCallBodyClass('callActive');
avideoModalIframeFull(linkAndPassword);
callModalIFrameClosedInterval = setInterval(function () {
if (!avideoModalIframeIsVisible()) {
callModalIFrameClosed();
sendSocketMessageToUser(users_id, 'callModalIFrameClosed', false);
sendSocketMessageToUser(my_users_id, 'callModalIFrameClosed', false);
setCallBodyClass('notCalling');
}
}, 1000);
hideCallPleaseWait();
}
var callModalIFrameClosedTimeout;
function callModalIFrameClosed() {
clearTimeout(callModalIFrameClosedTimeout);
clearInterval(callModalIFrameClosedInterval);
avideoModalIframeFullScreenClose();
callModalIFrameClosedTimeout = setTimeout(function () {
avideoToastInfo('Call disconnected');
}, 1000);
}
function hideCallPleaseWait() {
modal.hidePleaseWait();
}
var playCallIncomingSoundTimeout;
var playCallBusySoundTimeout;
var playCallingSoundTimeout;
function playCallIncomingSound() {
stopAllCallSounds();
playCallIncomingSoundTimeout = playAudio(webSiteRootURL + 'plugin/YPTSocket/mp3/call-incoming.mp3');
//avideoToastInfo('playCallIncomingSound', playCallIncomingSoundTimeout);
}
function playCallBusySound() {
stopAllCallSounds();
playCallBusySoundTimeout = playAudio(webSiteRootURL + 'plugin/YPTSocket/mp3/call-busy.mp3');
//avideoToastWarning('playCallBusySound');
}
function playCallingSound() {
stopAllCallSounds();
playCallingSoundTimeout = playAudio(webSiteRootURL + 'plugin/YPTSocket/mp3/calling.mp3');
//avideoToastInfo('playCallIncomingSound', playCallIncomingSoundTimeout);
}
function stopAllCallSounds() {
clearTimeout(playCallIncomingSoundTimeout);
clearTimeout(playCallBusySoundTimeout);
clearTimeout(playCallingSoundTimeout);
stopAllAudio();
}
function isCalling() {
return $('body').hasClass("calling");
}
function isReceivingCall() {
return $('body').hasClass("callIncoming");
}
function callerNewConnection(json) {
callerCheckUser(json.msg.users_id);
}
function callerDisconnection(json) {
callerCheckUser(json.msg.users_id);
}
var callerCheckUserList = [];
function callerCheckUser(users_id) {
callerCheckUserList.push(users_id);
if (isUserOnline(users_id)) {
//console.log('callerCheckUser OK', users_id, users_id_online);
$('.caller' + users_id).show();
} else {
//console.log('callerCheckUser NO', users_id, users_id_online);
$('.caller' + users_id).hide();
}
}
async function callerCheckUserTimer() {
if(!isReadyToCheckIfIsOnline()){
setTimeout(function(){callerCheckUserTimer();},1000);
return false;
}
var localCallerCheckUserList = callerCheckUserList;
callerCheckUserList = [];
for (var i in localCallerCheckUserList) {
var users_id = localCallerCheckUserList[i];
if(typeof users_id == 'function'){
continue;
}
if (isUserOnline(users_id)) {
//console.log('callerCheckUser OK', users_id, users_id_online);
$('.caller' + users_id).show();
} else {
//console.log('callerCheckUser NO', users_id, users_id_online);
$('.caller' + users_id).hide();
}
}
setTimeout(function(){callerCheckUserTimer();},2000);
}
function setCallBodyClass(name) {
$('body').removeClass('calling');
$('body').removeClass('callIncoming');
$('body').removeClass('notCalling');
$('body').removeClass('callActive');
//$('body').removeClass('callerUserOffline');
$('body').addClass(name);
}
function isCallerToastActive(users_id){
return typeof callerToast[users_id] == 'object' && (typeof callerToast[users_id].close == 'function' || typeof callerToast[users_id].reset == 'function');
}
function closeCallerToast(users_id){
if(typeof callerToast[users_id].reset == 'function'){
callerToast[users_id].reset();
}
if(typeof callerToast[users_id].close == 'function'){
callerToast[users_id].close();
}
}
$(document).ready(function () {
setInterval(function () {
if (isCalling()) {
playCallingSound();
} else if (isReceivingCall()) {
playCallIncomingSound();
}
}, 5000);
callerCheckUserTimer();
});