bigbluebutton-Github/bigbluebutton-html5/imports/ui/components/audio/audio-modal/service.js

97 lines
2.7 KiB
JavaScript
Raw Normal View History

import Service from '../service';
import Storage from '/imports/ui/services/storage/session';
const CLIENT_DID_USER_SELECTED_MICROPHONE_KEY = 'clientUserSelectedMicrophone';
const CLIENT_DID_USER_SELECTED_LISTEN_ONLY_KEY = 'clientUserSelectedListenOnly';
export const setUserSelectedMicrophone = (value) => (
Storage.setItem(CLIENT_DID_USER_SELECTED_MICROPHONE_KEY, !!value)
);
export const setUserSelectedListenOnly = (value) => (
Storage.setItem(CLIENT_DID_USER_SELECTED_LISTEN_ONLY_KEY, !!value)
);
export const didUserSelectedMicrophone = () => (
!!Storage.getItem(CLIENT_DID_USER_SELECTED_MICROPHONE_KEY)
);
export const didUserSelectedListenOnly = () => (
!!Storage.getItem(CLIENT_DID_USER_SELECTED_LISTEN_ONLY_KEY)
);
export const joinMicrophone = (skipEchoTest = false) => {
Storage.setItem(CLIENT_DID_USER_SELECTED_MICROPHONE_KEY, true);
Storage.setItem(CLIENT_DID_USER_SELECTED_LISTEN_ONLY_KEY, false);
const {
enabled: LOCAL_ECHO_TEST_ENABLED,
} = window.meetingClientSettings.public.media.localEchoTest;
const call = new Promise((resolve, reject) => {
try {
if ((skipEchoTest && !Service.isConnected()) || LOCAL_ECHO_TEST_ENABLED) {
return resolve(Service.joinMicrophone());
}
return resolve(Service.transferCall());
} catch {
return reject(Service.exitAudio);
}
});
return call.then(() => {
document.dispatchEvent(new Event("CLOSE_MODAL_AUDIO"));
}).catch((error) => {
throw error;
});
};
export const joinListenOnly = () => {
Storage.setItem(CLIENT_DID_USER_SELECTED_MICROPHONE_KEY, false);
Storage.setItem(CLIENT_DID_USER_SELECTED_LISTEN_ONLY_KEY, true);
return Service.joinListenOnly().then(() => {
// Autoplay block wasn't triggered. Close the modal. If autoplay was
// blocked, that'll be handled in the modal component when then
// prop transitions to a state where it was handled OR the user opts
// to close the modal.
if (!Service.autoplayBlocked()) {
document.dispatchEvent(new Event("CLOSE_MODAL_AUDIO"));
}
}).catch((error) => {
throw error;
});
};
export const leaveEchoTest = () => {
if (!Service.isEchoTest()) {
return Promise.resolve();
}
return Service.exitAudio();
};
export const closeModal = (callback) => {
if (Service.isConnecting()) {
Service.forceExitAudio();
}
callback();
};
const getTroubleshootingLink = (errorCode) => {
2024-07-03 01:58:58 +08:00
const TROUBLESHOOTING_LINKS = window.meetingClientSettings.public.media.audioTroubleshootingLinks;
if (TROUBLESHOOTING_LINKS) return TROUBLESHOOTING_LINKS[errorCode] || TROUBLESHOOTING_LINKS[0];
return null;
};
export default {
joinMicrophone,
closeModal,
joinListenOnly,
leaveEchoTest,
didUserSelectedMicrophone,
didUserSelectedListenOnly,
getTroubleshootingLink,
};