|
|
|
|
@@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h
|
|
|
|
|
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
|
|
|
|
|
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
|
|
|
|
|
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
|
|
|
|
|
* @version 1.3.46
|
|
|
|
|
* @version 1.3.47
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
@@ -54,6 +54,7 @@ const _PEER = {
|
|
|
|
|
sendVideo: '<i class="fab fa-youtube"></i>',
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const initUser = document.getElementById('initUser');
|
|
|
|
|
const bars = document.querySelectorAll('.volume-bar');
|
|
|
|
|
|
|
|
|
|
const userAgent = navigator.userAgent.toLowerCase();
|
|
|
|
|
@@ -69,11 +70,23 @@ const wbHeight = 600;
|
|
|
|
|
|
|
|
|
|
const swalImageUrl = '../images/pricing-illustration.svg';
|
|
|
|
|
|
|
|
|
|
// Get Settings from localStorage
|
|
|
|
|
// ####################################################
|
|
|
|
|
// LOCAL STORAGE
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
const lS = new LocalStorage();
|
|
|
|
|
const localStorageSettings = lS.getObjectLocalStorage('SFU_SETTINGS');
|
|
|
|
|
const lsSettings = localStorageSettings ? localStorageSettings : lS.SFU_SETTINGS;
|
|
|
|
|
console.log('LS_SETTINGS', lsSettings);
|
|
|
|
|
|
|
|
|
|
const localStorageSettings = lS.getLocalStorageSettings() || lS.SFU_SETTINGS;
|
|
|
|
|
|
|
|
|
|
const localStorageDevices = lS.getLocalStorageDevices() || lS.DEVICES_COUNT;
|
|
|
|
|
|
|
|
|
|
const localStorageInitConfig = lS.getLocalStorageInitConfig() || lS.INIT_CONFIG;
|
|
|
|
|
|
|
|
|
|
console.log('LOCAL_STORAGE', {
|
|
|
|
|
localStorageSettings: localStorageSettings,
|
|
|
|
|
localStorageDevices: localStorageDevices,
|
|
|
|
|
localStorageInitConfig: localStorageInitConfig,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// ####################################################
|
|
|
|
|
// DYNAMIC SETTINGS
|
|
|
|
|
@@ -123,9 +136,6 @@ let isChatGPTOn = false;
|
|
|
|
|
let isSpeechSynthesisSupported = 'speechSynthesis' in window;
|
|
|
|
|
let joinRoomWithoutAudioVideo = true;
|
|
|
|
|
let joinRoomWithScreen = false;
|
|
|
|
|
let initAudioButton = null;
|
|
|
|
|
let initVideoButton = null;
|
|
|
|
|
let initAudioVideoButton = null;
|
|
|
|
|
|
|
|
|
|
let recTimer = null;
|
|
|
|
|
let recElapsedTime = null;
|
|
|
|
|
@@ -159,6 +169,11 @@ let transcription;
|
|
|
|
|
|
|
|
|
|
function initClient() {
|
|
|
|
|
setTheme();
|
|
|
|
|
|
|
|
|
|
// Transcription
|
|
|
|
|
transcription = new Transcription();
|
|
|
|
|
transcription.init();
|
|
|
|
|
|
|
|
|
|
if (!DetectRTC.isMobileDevice) {
|
|
|
|
|
refreshMainButtonsToolTipPlacement();
|
|
|
|
|
setTippy('closeEmojiPickerContainer', 'Close', 'bottom');
|
|
|
|
|
@@ -246,10 +261,6 @@ function initClient() {
|
|
|
|
|
}
|
|
|
|
|
setupWhiteboard();
|
|
|
|
|
initEnumerateDevices();
|
|
|
|
|
|
|
|
|
|
// Transcription
|
|
|
|
|
transcription = new Transcription();
|
|
|
|
|
transcription.init();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ####################################################
|
|
|
|
|
@@ -328,6 +339,26 @@ function makeId(length) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ####################################################
|
|
|
|
|
// INIT ROOM
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
async function initRoom() {
|
|
|
|
|
const { audio, video, speaker } = lS.DEVICES_COUNT;
|
|
|
|
|
console.warn('Devices count --> ', { device_count: lS.DEVICES_COUNT, audio, video, speaker });
|
|
|
|
|
if (navigator.getDisplayMedia || navigator.mediaDevices.getDisplayMedia) {
|
|
|
|
|
BUTTONS.main.startScreenButton && show(initStartScreenButton);
|
|
|
|
|
}
|
|
|
|
|
if (!isAudioAllowed && !isVideoAllowed && !joinRoomWithoutAudioVideo) {
|
|
|
|
|
openURL(`/permission?room_id=${room_id}&message=Not allowed both Audio and Video`);
|
|
|
|
|
} else {
|
|
|
|
|
setButtonsInit();
|
|
|
|
|
handleSelectsInit();
|
|
|
|
|
await setSelectsInit();
|
|
|
|
|
await whoAreYou();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ####################################################
|
|
|
|
|
// ENUMERATE DEVICES
|
|
|
|
|
// ####################################################
|
|
|
|
|
@@ -336,17 +367,7 @@ async function initEnumerateDevices() {
|
|
|
|
|
console.log('01 ----> init Enumerate Devices');
|
|
|
|
|
await initEnumerateVideoDevices();
|
|
|
|
|
await initEnumerateAudioDevices();
|
|
|
|
|
if (navigator.getDisplayMedia || navigator.mediaDevices.getDisplayMedia) {
|
|
|
|
|
BUTTONS.main.startScreenButton && show(initStartScreenButton);
|
|
|
|
|
}
|
|
|
|
|
if (!isAudioAllowed && !isVideoAllowed && !joinRoomWithoutAudioVideo) {
|
|
|
|
|
openURL(`/permission?room_id=${room_id}&message=Not allowed both Audio and Video`);
|
|
|
|
|
} else {
|
|
|
|
|
whoAreYou();
|
|
|
|
|
setButtonsInit();
|
|
|
|
|
setSelectsInit();
|
|
|
|
|
handleSelectsInit();
|
|
|
|
|
}
|
|
|
|
|
await initRoom();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function initEnumerateVideoDevices() {
|
|
|
|
|
@@ -354,8 +375,8 @@ async function initEnumerateVideoDevices() {
|
|
|
|
|
// allow the video
|
|
|
|
|
await navigator.mediaDevices
|
|
|
|
|
.getUserMedia({ video: true })
|
|
|
|
|
.then((stream) => {
|
|
|
|
|
enumerateVideoDevices(stream);
|
|
|
|
|
.then(async (stream) => {
|
|
|
|
|
await enumerateVideoDevices(stream);
|
|
|
|
|
isVideoAllowed = true;
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
@@ -363,25 +384,25 @@ async function initEnumerateVideoDevices() {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function enumerateVideoDevices(stream) {
|
|
|
|
|
async function enumerateVideoDevices(stream) {
|
|
|
|
|
console.log('02 ----> Get Video Devices');
|
|
|
|
|
navigator.mediaDevices
|
|
|
|
|
await navigator.mediaDevices
|
|
|
|
|
.enumerateDevices()
|
|
|
|
|
.then((devices) =>
|
|
|
|
|
devices.forEach((device) => {
|
|
|
|
|
let el = null;
|
|
|
|
|
let eli = null;
|
|
|
|
|
devices.forEach(async (device) => {
|
|
|
|
|
let el,
|
|
|
|
|
eli = null;
|
|
|
|
|
if ('videoinput' === device.kind) {
|
|
|
|
|
el = videoSelect;
|
|
|
|
|
eli = initVideoSelect;
|
|
|
|
|
lS.DEVICES_COUNT.video++;
|
|
|
|
|
}
|
|
|
|
|
if (!el) return;
|
|
|
|
|
addChild(device, [el, eli]);
|
|
|
|
|
await addChild(device, [el, eli]);
|
|
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.then(() => {
|
|
|
|
|
stopTracks(stream);
|
|
|
|
|
.then(async () => {
|
|
|
|
|
await stopTracks(stream);
|
|
|
|
|
isEnumerateVideoDevices = true;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
@@ -391,9 +412,9 @@ async function initEnumerateAudioDevices() {
|
|
|
|
|
// allow the audio
|
|
|
|
|
await navigator.mediaDevices
|
|
|
|
|
.getUserMedia({ audio: true })
|
|
|
|
|
.then((stream) => {
|
|
|
|
|
enumerateAudioDevices(stream);
|
|
|
|
|
getMicrophoneVolumeIndicator(stream);
|
|
|
|
|
.then(async (stream) => {
|
|
|
|
|
await enumerateAudioDevices(stream);
|
|
|
|
|
await getMicrophoneVolumeIndicator(stream);
|
|
|
|
|
isAudioAllowed = true;
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
@@ -401,14 +422,14 @@ async function initEnumerateAudioDevices() {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function enumerateAudioDevices(stream) {
|
|
|
|
|
async function enumerateAudioDevices(stream) {
|
|
|
|
|
console.log('03 ----> Get Audio Devices');
|
|
|
|
|
navigator.mediaDevices
|
|
|
|
|
await navigator.mediaDevices
|
|
|
|
|
.enumerateDevices()
|
|
|
|
|
.then((devices) =>
|
|
|
|
|
devices.forEach((device) => {
|
|
|
|
|
let el = null;
|
|
|
|
|
let eli = null;
|
|
|
|
|
devices.forEach(async (device) => {
|
|
|
|
|
let el,
|
|
|
|
|
eli = null;
|
|
|
|
|
if ('audioinput' === device.kind) {
|
|
|
|
|
el = microphoneSelect;
|
|
|
|
|
eli = initMicrophoneSelect;
|
|
|
|
|
@@ -419,11 +440,11 @@ function enumerateAudioDevices(stream) {
|
|
|
|
|
lS.DEVICES_COUNT.speaker++;
|
|
|
|
|
}
|
|
|
|
|
if (!el) return;
|
|
|
|
|
addChild(device, [el, eli]);
|
|
|
|
|
await addChild(device, [el, eli]);
|
|
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
.then(() => {
|
|
|
|
|
stopTracks(stream);
|
|
|
|
|
.then(async () => {
|
|
|
|
|
await stopTracks(stream);
|
|
|
|
|
isEnumerateAudioDevices = true;
|
|
|
|
|
const sinkId = 'sinkId' in HTMLMediaElement.prototype;
|
|
|
|
|
speakerSelect.disabled = !sinkId;
|
|
|
|
|
@@ -435,13 +456,13 @@ function enumerateAudioDevices(stream) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function stopTracks(stream) {
|
|
|
|
|
async function stopTracks(stream) {
|
|
|
|
|
stream.getTracks().forEach((track) => {
|
|
|
|
|
track.stop();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function addChild(device, els) {
|
|
|
|
|
async function addChild(device, els) {
|
|
|
|
|
let kind = device.kind;
|
|
|
|
|
els.forEach((el) => {
|
|
|
|
|
let option = document.createElement('option');
|
|
|
|
|
@@ -467,7 +488,7 @@ function addChild(device, els) {
|
|
|
|
|
// MICROPHONE VOLUME INDICATOR
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
function getMicrophoneVolumeIndicator(stream) {
|
|
|
|
|
async function getMicrophoneVolumeIndicator(stream) {
|
|
|
|
|
if (isAudioContextSupported() && hasAudioTrack(stream)) {
|
|
|
|
|
stopMicrophoneProcessing();
|
|
|
|
|
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
|
|
|
|
@@ -549,7 +570,7 @@ function getNotify() {
|
|
|
|
|
return queryNotify;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
notify = lsSettings.share_on_join;
|
|
|
|
|
notify = localStorageSettings.share_on_join;
|
|
|
|
|
console.log('Direct join', { notify: notify });
|
|
|
|
|
return notify;
|
|
|
|
|
}
|
|
|
|
|
@@ -643,15 +664,15 @@ function getRoomPassword() {
|
|
|
|
|
// INIT CONFIG
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
function checkInitConfig() {
|
|
|
|
|
const initConfig = lS.getInitConfig();
|
|
|
|
|
console.log('04.5 ----> Get init config', initConfig);
|
|
|
|
|
if (initConfig) {
|
|
|
|
|
if (isAudioVideoAllowed && !initConfig.audioVideo) {
|
|
|
|
|
handleAudioVideo();
|
|
|
|
|
async function checkInitConfig() {
|
|
|
|
|
const localStorageInitConfig = lS.getLocalStorageInitConfig();
|
|
|
|
|
console.log('04.5 ----> Get init config', localStorageInitConfig);
|
|
|
|
|
if (localStorageInitConfig) {
|
|
|
|
|
if (isAudioVideoAllowed && !localStorageInitConfig.audioVideo) {
|
|
|
|
|
await handleAudioVideo();
|
|
|
|
|
} else {
|
|
|
|
|
if (isAudioAllowed && !initConfig.audio) handleAudio();
|
|
|
|
|
if (isVideoAllowed && !initConfig.video) handleVideo();
|
|
|
|
|
if (isAudioAllowed && !localStorageInitConfig.audio) handleAudio();
|
|
|
|
|
if (isVideoAllowed && !localStorageInitConfig.video) handleVideo();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -691,7 +712,7 @@ function getPeerInfo() {
|
|
|
|
|
// ENTER YOUR NAME | Enable/Disable AUDIO/VIDEO
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
function whoAreYou() {
|
|
|
|
|
async function whoAreYou() {
|
|
|
|
|
console.log('04 ----> Who are you?');
|
|
|
|
|
|
|
|
|
|
hide(loadingDiv);
|
|
|
|
|
@@ -729,7 +750,6 @@ function whoAreYou() {
|
|
|
|
|
hide(initStartScreenButton);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const initUser = document.getElementById('initUser');
|
|
|
|
|
initUser.classList.toggle('hidden');
|
|
|
|
|
|
|
|
|
|
Swal.fire({
|
|
|
|
|
@@ -756,9 +776,9 @@ function whoAreYou() {
|
|
|
|
|
setCookie(room_id + '_name', name, 30);
|
|
|
|
|
peer_name = name;
|
|
|
|
|
},
|
|
|
|
|
}).then(() => {
|
|
|
|
|
}).then(async () => {
|
|
|
|
|
if (initStream && !joinRoomWithScreen) {
|
|
|
|
|
stopTracks(initStream);
|
|
|
|
|
await stopTracks(initStream);
|
|
|
|
|
// hide(initVideo);
|
|
|
|
|
elemDisplay('initVideo', false);
|
|
|
|
|
}
|
|
|
|
|
@@ -795,7 +815,7 @@ function handleVideo() {
|
|
|
|
|
lS.setInitConfig(lS.MEDIA_TYPE.video, isVideoAllowed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleAudioVideo() {
|
|
|
|
|
async function handleAudioVideo() {
|
|
|
|
|
isAudioVideoAllowed = isAudioVideoAllowed ? false : true;
|
|
|
|
|
isAudioAllowed = isAudioVideoAllowed;
|
|
|
|
|
isVideoAllowed = isAudioVideoAllowed;
|
|
|
|
|
@@ -814,13 +834,13 @@ function handleAudioVideo() {
|
|
|
|
|
setColor(initVideoButton, isVideoAllowed ? 'white' : 'red');
|
|
|
|
|
setColor(startAudioButton, isAudioAllowed ? 'white' : 'red');
|
|
|
|
|
setColor(startVideoButton, isVideoAllowed ? 'white' : 'red');
|
|
|
|
|
checkInitVideo(isVideoAllowed);
|
|
|
|
|
await checkInitVideo(isVideoAllowed);
|
|
|
|
|
checkInitAudio(isAudioAllowed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function checkInitVideo(isVideoAllowed) {
|
|
|
|
|
async function checkInitVideo(isVideoAllowed) {
|
|
|
|
|
if (isVideoAllowed && BUTTONS.main.startVideoButton) {
|
|
|
|
|
if (initVideoSelect.value) changeCamera(initVideoSelect.value);
|
|
|
|
|
if (initVideoSelect.value) await changeCamera(initVideoSelect.value);
|
|
|
|
|
sound('joined');
|
|
|
|
|
} else {
|
|
|
|
|
if (initStream) {
|
|
|
|
|
@@ -1366,14 +1386,14 @@ function handleButtons() {
|
|
|
|
|
lowerHandButton.onclick = () => {
|
|
|
|
|
rc.updatePeerInfo(peer_name, socket.id, 'hand', false);
|
|
|
|
|
};
|
|
|
|
|
startAudioButton.onclick = () => {
|
|
|
|
|
startAudioButton.onclick = async () => {
|
|
|
|
|
const moderator = rc.getModerator();
|
|
|
|
|
if (moderator.audio_cant_unmute) {
|
|
|
|
|
return userLog('warning', 'The moderator does not allow you to unmute', 'top-end', 6000);
|
|
|
|
|
}
|
|
|
|
|
if (isPushToTalkActive) return;
|
|
|
|
|
setAudioButtonsDisabled(true);
|
|
|
|
|
if (!isEnumerateAudioDevices) initEnumerateAudioDevices();
|
|
|
|
|
if (!isEnumerateAudioDevices) await initEnumerateAudioDevices();
|
|
|
|
|
rc.produce(RoomClient.mediaType.audio, microphoneSelect.value);
|
|
|
|
|
rc.updatePeerInfo(peer_name, socket.id, 'audio', true);
|
|
|
|
|
// rc.resumeProducer(RoomClient.mediaType.audio);
|
|
|
|
|
@@ -1385,13 +1405,13 @@ function handleButtons() {
|
|
|
|
|
rc.updatePeerInfo(peer_name, socket.id, 'audio', false);
|
|
|
|
|
// rc.pauseProducer(RoomClient.mediaType.audio);
|
|
|
|
|
};
|
|
|
|
|
startVideoButton.onclick = () => {
|
|
|
|
|
startVideoButton.onclick = async () => {
|
|
|
|
|
const moderator = rc.getModerator();
|
|
|
|
|
if (moderator.video_cant_unhide) {
|
|
|
|
|
return userLog('warning', 'The moderator does not allow you to unhide', 'top-end', 6000);
|
|
|
|
|
}
|
|
|
|
|
setVideoButtonsDisabled(true);
|
|
|
|
|
if (!isEnumerateVideoDevices) initEnumerateVideoDevices();
|
|
|
|
|
if (!isEnumerateVideoDevices) await initEnumerateVideoDevices();
|
|
|
|
|
rc.produce(RoomClient.mediaType.video, videoSelect.value);
|
|
|
|
|
// rc.resumeProducer(RoomClient.mediaType.video);
|
|
|
|
|
};
|
|
|
|
|
@@ -1515,9 +1535,6 @@ function setButtonsInit() {
|
|
|
|
|
setTippy('initStartScreenButton', 'Toggle screen sharing', 'top');
|
|
|
|
|
setTippy('initStopScreenButton', 'Toggle screen sharing', 'top');
|
|
|
|
|
}
|
|
|
|
|
initAudioButton = document.getElementById('initAudioButton');
|
|
|
|
|
initVideoButton = document.getElementById('initVideoButton');
|
|
|
|
|
initAudioVideoButton = document.getElementById('initAudioVideoButton');
|
|
|
|
|
if (!isAudioAllowed) hide(initAudioButton);
|
|
|
|
|
if (!isVideoAllowed) hide(initVideoButton);
|
|
|
|
|
if (!isAudioAllowed || !isVideoAllowed) hide(initAudioVideoButton);
|
|
|
|
|
@@ -1526,14 +1543,14 @@ function setButtonsInit() {
|
|
|
|
|
|
|
|
|
|
function handleSelectsInit() {
|
|
|
|
|
// devices init options
|
|
|
|
|
initVideoSelect.onchange = () => {
|
|
|
|
|
changeCamera(initVideoSelect.value);
|
|
|
|
|
initVideoSelect.onchange = async () => {
|
|
|
|
|
await changeCamera(initVideoSelect.value);
|
|
|
|
|
videoSelect.selectedIndex = initVideoSelect.selectedIndex;
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.video, videoSelect.selectedIndex, videoSelect.value);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.video, initVideoSelect.selectedIndex, initVideoSelect.value);
|
|
|
|
|
};
|
|
|
|
|
initMicrophoneSelect.onchange = () => {
|
|
|
|
|
microphoneSelect.selectedIndex = initMicrophoneSelect.selectedIndex;
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.audio, microphoneSelect.selectedIndex, microphoneSelect.value);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.audio, initMicrophoneSelect.selectedIndex, initMicrophoneSelect.value);
|
|
|
|
|
};
|
|
|
|
|
initSpeakerSelect.onchange = () => {
|
|
|
|
|
speakerSelect.selectedIndex = initSpeakerSelect.selectedIndex;
|
|
|
|
|
@@ -1541,10 +1558,24 @@ function handleSelectsInit() {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setSelectsInit() {
|
|
|
|
|
const localStorageDevices = lS.getLocalStorageDevices();
|
|
|
|
|
console.log('04.0 ----> Get Local Storage Devices before', localStorageDevices);
|
|
|
|
|
async function setSelectsInit() {
|
|
|
|
|
if (localStorageDevices) {
|
|
|
|
|
// TODO Fix audio and speaker! O.o
|
|
|
|
|
console.log('04.0 ----> Get Local Storage Devices before', {
|
|
|
|
|
localStorageDevices: localStorageDevices,
|
|
|
|
|
devicesCount: lS.DEVICES_COUNT,
|
|
|
|
|
index: {
|
|
|
|
|
audio: localStorageDevices.audio.index,
|
|
|
|
|
speaker: localStorageDevices.speaker.index,
|
|
|
|
|
video: localStorageDevices.video.index,
|
|
|
|
|
},
|
|
|
|
|
count: {
|
|
|
|
|
audio: lS.DEVICES_COUNT.audio,
|
|
|
|
|
speaker: lS.DEVICES_COUNT.speaker,
|
|
|
|
|
video: lS.DEVICES_COUNT.video,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
//
|
|
|
|
|
initMicrophoneSelect.selectedIndex = localStorageDevices.audio.index;
|
|
|
|
|
initSpeakerSelect.selectedIndex = localStorageDevices.speaker.index;
|
|
|
|
|
initVideoSelect.selectedIndex = localStorageDevices.video.index;
|
|
|
|
|
@@ -1553,7 +1584,7 @@ function setSelectsInit() {
|
|
|
|
|
speakerSelect.selectedIndex = initSpeakerSelect.selectedIndex;
|
|
|
|
|
videoSelect.selectedIndex = initVideoSelect.selectedIndex;
|
|
|
|
|
//
|
|
|
|
|
if (lS.DEVICES_COUNT.audio != localStorageDevices.audio.count) {
|
|
|
|
|
if (lS.DEVICES_COUNT.audio !== localStorageDevices.audio.count) {
|
|
|
|
|
console.log('04.1 ----> Audio devices seems changed, use default index 0');
|
|
|
|
|
initMicrophoneSelect.selectedIndex = 0;
|
|
|
|
|
microphoneSelect.selectedIndex = 0;
|
|
|
|
|
@@ -1563,17 +1594,13 @@ function setSelectsInit() {
|
|
|
|
|
initMicrophoneSelect.value,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
if (lS.DEVICES_COUNT.speaker != localStorageDevices.speaker.count) {
|
|
|
|
|
if (lS.DEVICES_COUNT.speaker !== localStorageDevices.speaker.count) {
|
|
|
|
|
console.log('04.2 ----> Speaker devices seems changed, use default index 0');
|
|
|
|
|
initSpeakerSelect.selectedIndex = 0;
|
|
|
|
|
speakerSelect.selectedIndex = 0;
|
|
|
|
|
lS.setLocalStorageDevices(
|
|
|
|
|
lS.MEDIA_TYPE.speaker,
|
|
|
|
|
initSpeakerSelect.selectedIndexIndex,
|
|
|
|
|
initSpeakerSelect.value,
|
|
|
|
|
);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.speaker, initSpeakerSelect.selectedIndex, initSpeakerSelect.value);
|
|
|
|
|
}
|
|
|
|
|
if (lS.DEVICES_COUNT.video != localStorageDevices.video.count) {
|
|
|
|
|
if (lS.DEVICES_COUNT.video !== localStorageDevices.video.count) {
|
|
|
|
|
console.log('04.3 ----> Video devices seems changed, use default index 0');
|
|
|
|
|
initVideoSelect.selectedIndex = 0;
|
|
|
|
|
videoSelect.selectedIndex = 0;
|
|
|
|
|
@@ -1582,12 +1609,12 @@ function setSelectsInit() {
|
|
|
|
|
//
|
|
|
|
|
console.log('04.4 ----> Get Local Storage Devices after', lS.getLocalStorageDevices());
|
|
|
|
|
}
|
|
|
|
|
if (initVideoSelect.value) changeCamera(initVideoSelect.value);
|
|
|
|
|
if (initVideoSelect.value) await changeCamera(initVideoSelect.value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function changeCamera(deviceId) {
|
|
|
|
|
if (initStream) {
|
|
|
|
|
stopTracks(initStream);
|
|
|
|
|
await stopTracks(initStream);
|
|
|
|
|
//show(initVideo);
|
|
|
|
|
elemDisplay('initVideo', true);
|
|
|
|
|
if (!initVideo.classList.contains('mirror')) {
|
|
|
|
|
@@ -1628,7 +1655,7 @@ async function changeCamera(deviceId) {
|
|
|
|
|
|
|
|
|
|
async function toggleScreenSharing() {
|
|
|
|
|
if (initStream) {
|
|
|
|
|
stopTracks(initStream);
|
|
|
|
|
await stopTracks(initStream);
|
|
|
|
|
//show(initVideo);
|
|
|
|
|
elemDisplay('initVideo', true);
|
|
|
|
|
}
|
|
|
|
|
@@ -1675,21 +1702,21 @@ function handleSelects() {
|
|
|
|
|
};
|
|
|
|
|
videoFps.onchange = () => {
|
|
|
|
|
rc.closeThenProduce(RoomClient.mediaType.video, videoSelect.value);
|
|
|
|
|
lsSettings.video_fps = videoFps.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.video_fps = videoFps.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
};
|
|
|
|
|
screenFps.onchange = () => {
|
|
|
|
|
rc.closeThenProduce(RoomClient.mediaType.screen);
|
|
|
|
|
lsSettings.screen_fps = screenFps.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.screen_fps = screenFps.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
};
|
|
|
|
|
microphoneSelect.onchange = () => {
|
|
|
|
|
rc.closeThenProduce(RoomClient.mediaType.audio, microphoneSelect.value);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.audio, microphoneSelect.selectedIndex, microphoneSelect.value);
|
|
|
|
|
};
|
|
|
|
|
initSpeakerSelect.onchange = () => {
|
|
|
|
|
rc.attachSinkId(rc.myAudioEl, initSpeakerSelect.value);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.speaker, initSpeakerSelect.selectedIndex, initSpeakerSelect.value);
|
|
|
|
|
speakerSelect.onchange = () => {
|
|
|
|
|
rc.attachSinkId(rc.myAudioEl, speakerSelect.value);
|
|
|
|
|
lS.setLocalStorageDevices(lS.MEDIA_TYPE.speaker, speakerSelect.selectedIndex, speakerSelect.value);
|
|
|
|
|
};
|
|
|
|
|
switchPushToTalk.onchange = (e) => {
|
|
|
|
|
const producerExist = rc.producerExist(RoomClient.mediaType.audio);
|
|
|
|
|
@@ -1736,79 +1763,79 @@ function handleSelects() {
|
|
|
|
|
switchBroadcasting.onchange = (e) => {
|
|
|
|
|
isBroadcastingEnabled = e.currentTarget.checked;
|
|
|
|
|
rc.roomAction('broadcasting');
|
|
|
|
|
lsSettings.broadcasting = isBroadcastingEnabled;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.broadcasting = isBroadcastingEnabled;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchLobby.onchange = (e) => {
|
|
|
|
|
isLobbyEnabled = e.currentTarget.checked;
|
|
|
|
|
rc.roomAction(isLobbyEnabled ? 'lobbyOn' : 'lobbyOff');
|
|
|
|
|
rc.lobbyToggle();
|
|
|
|
|
lsSettings.lobby = isLobbyEnabled;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.lobby = isLobbyEnabled;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchPitchBar.onchange = (e) => {
|
|
|
|
|
isPitchBarEnabled = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('pitchBar', isPitchBarEnabled);
|
|
|
|
|
lsSettings.pitch_bar = isPitchBarEnabled;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.pitch_bar = isPitchBarEnabled;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchSounds.onchange = (e) => {
|
|
|
|
|
isSoundEnabled = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('sounds', isSoundEnabled);
|
|
|
|
|
lsSettings.sounds = isSoundEnabled;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.sounds = isSoundEnabled;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchShare.onchange = (e) => {
|
|
|
|
|
notify = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('notify', notify);
|
|
|
|
|
lsSettings.share_on_join = notify;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.share_on_join = notify;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
// audio options
|
|
|
|
|
switchAutoGainControl.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_auto_gain_control = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_auto_gain_control = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEchoCancellation.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_echo_cancellations = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_echo_cancellations = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchNoiseSuppression.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_noise_suppression = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_noise_suppression = e.currentTarget.checked;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
sampleRateSelect.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_sample_rate = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_sample_rate = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
sampleSizeSelect.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_sample_size = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_sample_size = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
channelCountSelect.onchange = (e) => {
|
|
|
|
|
lsSettings.mic_channel_count = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_channel_count = e.currentTarget.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
micLatencyRange.oninput = (e) => {
|
|
|
|
|
lsSettings.mic_latency = e.currentTarget.value;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_latency = e.currentTarget.value;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
micLatencyValue.innerText = e.currentTarget.value;
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
micVolumeRange.oninput = (e) => {
|
|
|
|
|
lsSettings.mic_volume = e.currentTarget.value;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.mic_volume = e.currentTarget.value;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
micVolumeValue.innerText = e.currentTarget.value;
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
@@ -1816,15 +1843,15 @@ function handleSelects() {
|
|
|
|
|
switchHostOnlyRecording.onchange = (e) => {
|
|
|
|
|
hostOnlyRecording = e.currentTarget.checked;
|
|
|
|
|
rc.roomAction(hostOnlyRecording ? 'hostOnlyRecordingOn' : 'hostOnlyRecordingOff');
|
|
|
|
|
lsSettings.host_only_recording = hostOnlyRecording;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.host_only_recording = hostOnlyRecording;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchH264Recording.onchange = (e) => {
|
|
|
|
|
recPrioritizeH264 = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('recPrioritizeH264', recPrioritizeH264);
|
|
|
|
|
lsSettings.rec_prioritize_h264 = recPrioritizeH264;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.rec_prioritize_h264 = recPrioritizeH264;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
// styling
|
|
|
|
|
@@ -1833,59 +1860,59 @@ function handleSelects() {
|
|
|
|
|
};
|
|
|
|
|
BtnVideoObjectFit.onchange = () => {
|
|
|
|
|
rc.handleVideoObjectFit(BtnVideoObjectFit.value);
|
|
|
|
|
lsSettings.video_obj_fit = BtnVideoObjectFit.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.video_obj_fit = BtnVideoObjectFit.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
}; // cover
|
|
|
|
|
BtnVideoControls.onchange = () => {
|
|
|
|
|
rc.handleVideoControls(BtnVideoControls.value);
|
|
|
|
|
lsSettings.video_controls = BtnVideoControls.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.video_controls = BtnVideoControls.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
};
|
|
|
|
|
selectTheme.onchange = () => {
|
|
|
|
|
lsSettings.theme = selectTheme.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.theme = selectTheme.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
setTheme();
|
|
|
|
|
};
|
|
|
|
|
BtnsBarPosition.onchange = () => {
|
|
|
|
|
rc.changeBtnsBarPosition(BtnsBarPosition.value);
|
|
|
|
|
lsSettings.buttons_bar = BtnsBarPosition.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.buttons_bar = BtnsBarPosition.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
refreshMainButtonsToolTipPlacement();
|
|
|
|
|
resizeMainButtons();
|
|
|
|
|
};
|
|
|
|
|
pinVideoPosition.onchange = () => {
|
|
|
|
|
rc.toggleVideoPin(pinVideoPosition.value);
|
|
|
|
|
lsSettings.pin_grid = pinVideoPosition.selectedIndex;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.pin_grid = pinVideoPosition.selectedIndex;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
};
|
|
|
|
|
// chat
|
|
|
|
|
showChatOnMsg.onchange = (e) => {
|
|
|
|
|
rc.showChatOnMessage = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('showChat', rc.showChatOnMessage);
|
|
|
|
|
lsSettings.show_chat_on_msg = rc.showChatOnMessage;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.show_chat_on_msg = rc.showChatOnMessage;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
speechIncomingMsg.onchange = (e) => {
|
|
|
|
|
rc.speechInMessages = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('speechMessages', rc.speechInMessages);
|
|
|
|
|
lsSettings.speech_in_msg = rc.speechInMessages;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.speech_in_msg = rc.speechInMessages;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
// transcript
|
|
|
|
|
transcriptPersistentMode.onchange = (e) => {
|
|
|
|
|
transcription.isPersistentMode = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('transcriptIsPersistentMode', transcription.isPersistentMode);
|
|
|
|
|
lsSettings.transcript_persistent_mode = transcription.isPersistentMode;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.transcript_persistent_mode = transcription.isPersistentMode;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
transcriptShowOnMsg.onchange = (e) => {
|
|
|
|
|
transcription.showOnMessage = e.currentTarget.checked;
|
|
|
|
|
rc.roomMessage('transcriptShowOnMsg', transcription.showOnMessage);
|
|
|
|
|
lsSettings.transcript_show_on_msg = transcription.showOnMessage;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.transcript_show_on_msg = transcription.showOnMessage;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
// whiteboard options
|
|
|
|
|
@@ -1905,56 +1932,56 @@ function handleSelects() {
|
|
|
|
|
const audioStartMuted = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'audio_start_muted', status: audioStartMuted });
|
|
|
|
|
rc.roomMessage('audio_start_muted', audioStartMuted);
|
|
|
|
|
lsSettings.moderator_audio_start_muted = audioStartMuted;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_audio_start_muted = audioStartMuted;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneHidden.onchange = (e) => {
|
|
|
|
|
const videoStartHidden = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'video_start_hidden', status: videoStartHidden });
|
|
|
|
|
rc.roomMessage('video_start_hidden', videoStartHidden);
|
|
|
|
|
lsSettings.moderator_video_start_hidden = videoStartHidden;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_video_start_hidden = videoStartHidden;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneCantUnmute.onchange = (e) => {
|
|
|
|
|
const audioCantUnmute = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'audio_cant_unmute', status: audioCantUnmute });
|
|
|
|
|
rc.roomMessage('audio_cant_unmute', audioCantUnmute);
|
|
|
|
|
lsSettings.moderator_audio_cant_unmute = audioCantUnmute;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_audio_cant_unmute = audioCantUnmute;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneCantUnhide.onchange = (e) => {
|
|
|
|
|
const videoCantUnhide = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'video_cant_unhide', status: videoCantUnhide });
|
|
|
|
|
rc.roomMessage('video_cant_unhide', videoCantUnhide);
|
|
|
|
|
lsSettings.moderator_video_cant_unhide = videoCantUnhide;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_video_cant_unhide = videoCantUnhide;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneCantShareScreen.onchange = (e) => {
|
|
|
|
|
const screenCantShare = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'screen_cant_share', status: screenCantShare });
|
|
|
|
|
rc.roomMessage('screen_cant_share', screenCantShare);
|
|
|
|
|
lsSettings.moderator_screen_cant_share = screenCantShare;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_screen_cant_share = screenCantShare;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneCantChatPrivately.onchange = (e) => {
|
|
|
|
|
const chatCantPrivately = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'chat_cant_privately', status: chatCantPrivately });
|
|
|
|
|
rc.roomMessage('chat_cant_privately', chatCantPrivately);
|
|
|
|
|
lsSettings.moderator_chat_cant_privately = chatCantPrivately;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_chat_cant_privately = chatCantPrivately;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
switchEveryoneCantChatChatGPT.onchange = (e) => {
|
|
|
|
|
const chatCantChatGPT = e.currentTarget.checked;
|
|
|
|
|
rc.updateRoomModerator({ type: 'chat_cant_chatgpt', status: chatCantChatGPT });
|
|
|
|
|
rc.roomMessage('chat_cant_chatgpt', chatCantChatGPT);
|
|
|
|
|
lsSettings.moderator_chat_cant_chatgpt = chatCantChatGPT;
|
|
|
|
|
lS.setSettings(lsSettings);
|
|
|
|
|
localStorageSettings.moderator_chat_cant_chatgpt = chatCantChatGPT;
|
|
|
|
|
lS.setSettings(localStorageSettings);
|
|
|
|
|
e.target.blur();
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
@@ -2103,12 +2130,12 @@ function handleRoomEmojiPicker() {
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
function loadSettingsFromLocalStorage() {
|
|
|
|
|
rc.showChatOnMessage = lsSettings.show_chat_on_msg;
|
|
|
|
|
transcription.isPersistentMode = lsSettings.transcript_persistent_mode;
|
|
|
|
|
transcription.showOnMessage = lsSettings.transcript_show_on_msg;
|
|
|
|
|
rc.speechInMessages = lsSettings.speech_in_msg;
|
|
|
|
|
isPitchBarEnabled = lsSettings.pitch_bar;
|
|
|
|
|
isSoundEnabled = lsSettings.sounds;
|
|
|
|
|
rc.showChatOnMessage = localStorageSettings.show_chat_on_msg;
|
|
|
|
|
transcription.isPersistentMode = localStorageSettings.transcript_persistent_mode;
|
|
|
|
|
transcription.showOnMessage = localStorageSettings.transcript_show_on_msg;
|
|
|
|
|
rc.speechInMessages = localStorageSettings.speech_in_msg;
|
|
|
|
|
isPitchBarEnabled = localStorageSettings.pitch_bar;
|
|
|
|
|
isSoundEnabled = localStorageSettings.sounds;
|
|
|
|
|
showChatOnMsg.checked = rc.showChatOnMessage;
|
|
|
|
|
transcriptPersistentMode.checked = transcription.isPersistentMode;
|
|
|
|
|
transcriptShowOnMsg.checked = transcription.showOnMessage;
|
|
|
|
|
@@ -2117,27 +2144,27 @@ function loadSettingsFromLocalStorage() {
|
|
|
|
|
switchSounds.checked = isSoundEnabled;
|
|
|
|
|
switchShare.checked = notify;
|
|
|
|
|
|
|
|
|
|
recPrioritizeH264 = lsSettings.rec_prioritize_h264;
|
|
|
|
|
recPrioritizeH264 = localStorageSettings.rec_prioritize_h264;
|
|
|
|
|
switchH264Recording.checked = recPrioritizeH264;
|
|
|
|
|
|
|
|
|
|
switchAutoGainControl.checked = lsSettings.mic_auto_gain_control;
|
|
|
|
|
switchEchoCancellation.checked = lsSettings.mic_echo_cancellations;
|
|
|
|
|
switchNoiseSuppression.checked = lsSettings.mic_noise_suppression;
|
|
|
|
|
sampleRateSelect.selectedIndex = lsSettings.mic_sample_rate;
|
|
|
|
|
sampleSizeSelect.selectedIndex = lsSettings.mic_sample_size;
|
|
|
|
|
channelCountSelect.selectedIndex = lsSettings.mic_channel_count;
|
|
|
|
|
switchAutoGainControl.checked = localStorageSettings.mic_auto_gain_control;
|
|
|
|
|
switchEchoCancellation.checked = localStorageSettings.mic_echo_cancellations;
|
|
|
|
|
switchNoiseSuppression.checked = localStorageSettings.mic_noise_suppression;
|
|
|
|
|
sampleRateSelect.selectedIndex = localStorageSettings.mic_sample_rate;
|
|
|
|
|
sampleSizeSelect.selectedIndex = localStorageSettings.mic_sample_size;
|
|
|
|
|
channelCountSelect.selectedIndex = localStorageSettings.mic_channel_count;
|
|
|
|
|
|
|
|
|
|
micLatencyRange.value = lsSettings.mic_latency || 50;
|
|
|
|
|
micLatencyValue.innerText = lsSettings.mic_latency || 50;
|
|
|
|
|
micVolumeRange.value = lsSettings.mic_volume || 100;
|
|
|
|
|
micVolumeValue.innerText = lsSettings.mic_volume || 100;
|
|
|
|
|
micLatencyRange.value = localStorageSettings.mic_latency || 50;
|
|
|
|
|
micLatencyValue.innerText = localStorageSettings.mic_latency || 50;
|
|
|
|
|
micVolumeRange.value = localStorageSettings.mic_volume || 100;
|
|
|
|
|
micVolumeValue.innerText = localStorageSettings.mic_volume || 100;
|
|
|
|
|
|
|
|
|
|
videoFps.selectedIndex = lsSettings.video_fps;
|
|
|
|
|
screenFps.selectedIndex = lsSettings.screen_fps;
|
|
|
|
|
BtnVideoObjectFit.selectedIndex = lsSettings.video_obj_fit;
|
|
|
|
|
BtnVideoControls.selectedIndex = lsSettings.video_controls;
|
|
|
|
|
BtnsBarPosition.selectedIndex = lsSettings.buttons_bar;
|
|
|
|
|
pinVideoPosition.selectedIndex = lsSettings.pin_grid;
|
|
|
|
|
videoFps.selectedIndex = localStorageSettings.video_fps;
|
|
|
|
|
screenFps.selectedIndex = localStorageSettings.screen_fps;
|
|
|
|
|
BtnVideoObjectFit.selectedIndex = localStorageSettings.video_obj_fit;
|
|
|
|
|
BtnVideoControls.selectedIndex = localStorageSettings.video_controls;
|
|
|
|
|
BtnsBarPosition.selectedIndex = localStorageSettings.buttons_bar;
|
|
|
|
|
pinVideoPosition.selectedIndex = localStorageSettings.pin_grid;
|
|
|
|
|
rc.handleVideoObjectFit(BtnVideoObjectFit.value);
|
|
|
|
|
rc.handleVideoControls(BtnVideoControls.value);
|
|
|
|
|
rc.changeBtnsBarPosition(BtnsBarPosition.value);
|
|
|
|
|
@@ -2528,6 +2555,10 @@ function isHtml(str) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getId(id) {
|
|
|
|
|
return document.getElementById(id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ####################################################
|
|
|
|
|
// HANDLE WHITEBOARD
|
|
|
|
|
// ####################################################
|
|
|
|
|
@@ -3302,7 +3333,7 @@ function getParticipantAvatar(peerName) {
|
|
|
|
|
// ####################################################
|
|
|
|
|
|
|
|
|
|
function setTheme() {
|
|
|
|
|
selectTheme.selectedIndex = lsSettings.theme;
|
|
|
|
|
selectTheme.selectedIndex = localStorageSettings.theme;
|
|
|
|
|
const theme = selectTheme.value;
|
|
|
|
|
switch (theme) {
|
|
|
|
|
case 'dark':
|
|
|
|
|
|