123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- // @flow
-
- import { getRoomName } from '../base/conference';
- import { getDialOutStatusUrl, getDialOutUrl } from '../base/config/functions';
-
- /**
- * Mutes or unmutes a track.
- *
- * @param {Object} track - The track to be configured.
- * @param {boolean} shouldMute - If it should mute or not.
- * @returns {Promise<void>}
- */
- function applyMuteOptionsToTrack(track, shouldMute) {
- if (track.isMuted() === shouldMute) {
- return;
- }
-
- if (shouldMute) {
- return track.mute();
- }
-
- return track.unmute();
- }
-
- /**
- * Selector for the visibility of the 'join by phone' button.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isJoinByPhoneButtonVisible(state: Object): boolean {
- return Boolean(getDialOutUrl(state) && getDialOutStatusUrl(state));
- }
-
- /**
- * Selector for determining if the device status strip is visible or not.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isDeviceStatusVisible(state: Object): boolean {
- return !((isAudioDisabled(state) && isPrejoinVideoDisabled(state))
- || (isPrejoinAudioMuted(state) && isPrejoinVideoMuted(state)));
- }
-
- /**
- * Selector for getting the active video/content sharing track.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function getActiveVideoTrack(state: Object): Object {
- const track = getVideoTrack(state) || getContentSharingTrack(state);
-
- if (track && track.isActive()) {
- return track;
- }
-
- return null;
- }
-
- /**
- * Returns a list with all the prejoin tracks configured according to
- * user's preferences.
- *
- * @param {Object} state - The state of the app.
- * @returns {Promise<Object[]>}
- */
- export async function getAllPrejoinConfiguredTracks(state: Object): Promise<Object[]> {
- const tracks = [];
- const audioTrack = getAudioTrack(state);
- const videoTrack = getVideoTrack(state);
- const csTrack = getContentSharingTrack(state);
-
- if (csTrack) {
- tracks.push(csTrack);
- } else if (videoTrack) {
- await applyMuteOptionsToTrack(videoTrack, isPrejoinVideoMuted(state));
- tracks.push(videoTrack);
- }
-
- if (audioTrack) {
- await applyMuteOptionsToTrack(audioTrack, isPrejoinAudioMuted(state));
- isPrejoinAudioMuted(state) && audioTrack.mute();
- tracks.push(audioTrack);
- }
-
- return tracks;
- }
-
- /**
- * Selector for getting the prejoin audio track.
- *
- * @param {Object} state - The state of the app.
- * @returns {Object}
- */
- export function getAudioTrack(state: Object): Object {
- return state['features/prejoin']?.audioTrack;
- }
-
- /**
- * Selector for getting the prejoin content sharing track.
- *
- * @param {Object} state - The state of the app.
- * @returns {Object}
- */
- export function getContentSharingTrack(state: Object): Object {
- return state['features/prejoin']?.contentSharingTrack;
- }
-
- /**
- * Returns the text for the prejoin status bar.
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getDeviceStatusText(state: Object): string {
- return state['features/prejoin']?.deviceStatusText;
- }
-
- /**
- * Returns the type of the prejoin status bar: 'ok'|'warning'.
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getDeviceStatusType(state: Object): string {
- return state['features/prejoin']?.deviceStatusType;
- }
-
- /**
- * Returns the 'conferenceUrl' used for dialing out.
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutConferenceUrl(state: Object): string {
- return `${getRoomName(state)}@${state['features/base/config'].hosts.muc}`;
- }
-
- /**
- * Selector for getting the dial out country.
- *
- * @param {Object} state - The state of the app.
- * @returns {Object}
- */
- export function getDialOutCountry(state: Object): Object {
- return state['features/prejoin'].dialOutCountry;
- }
-
- /**
- * Selector for getting the dial out number (without prefix).
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutNumber(state: Object): string {
- return state['features/prejoin'].dialOutNumber;
- }
-
- /**
- * Selector for getting the dial out status while calling.
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getDialOutStatus(state: Object): string {
- return state['features/prejoin'].dialOutStatus;
- }
-
- /**
- * Returns the full dial out number (containing country code and +).
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getFullDialOutNumber(state: Object): string {
- const dialOutNumber = getDialOutNumber(state);
- const country = getDialOutCountry(state);
-
- return `+${country.dialCode}${dialOutNumber}`;
- }
-
- /**
- * Selector for getting the prejoin video track.
- *
- * @param {Object} state - The state of the app.
- * @returns {Object}
- */
- export function getVideoTrack(state: Object): Object {
- return state['features/prejoin']?.videoTrack;
- }
-
- /**
- * Selector for getting the mute status of the prejoin audio.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinAudioMuted(state: Object): boolean {
- return state['features/prejoin']?.audioMuted;
- }
-
- /**
- * Selector for getting the mute status of the prejoin video.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinVideoMuted(state: Object): boolean {
- return state['features/prejoin']?.videoMuted;
- }
-
- /**
- * Selector for getting the error if any while creating streams.
- *
- * @param {Object} state - The state of the app.
- * @returns {string}
- */
- export function getRawError(state: Object): string {
- return state['features/prejoin']?.rawError;
- }
-
- /**
- * Selector for getting state of the prejoin audio.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isAudioDisabled(state: Object): Object {
- return state['features/prejoin']?.audioDisabled;
- }
-
- /**
- * Selector for getting state of the prejoin video.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinVideoDisabled(state: Object): Object {
- return state['features/prejoin']?.videoDisabled;
- }
-
- /**
- * Selector for getting the visiblity state for the 'JoinByPhoneDialog'.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isJoinByPhoneDialogVisible(state: Object): boolean {
- return state['features/prejoin']?.showJoinByPhoneDialog;
- }
-
- /**
- * Returns true if the prejoin page is enabled and no flag
- * to bypass showing the page is present.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinPageEnabled(state: Object): boolean {
- return state['features/base/config'].prejoinPageEnabled
- && !state['features/base/settings'].userSelectedSkipPrejoin;
- }
-
- /**
- * Returns true if the prejoin page is visible & active.
- *
- * @param {Object} state - The state of the app.
- * @returns {boolean}
- */
- export function isPrejoinPageVisible(state: Object): boolean {
- return isPrejoinPageEnabled(state) && state['features/prejoin']?.showPrejoin;
- }
|