Files
jitsi-meet/react/features/screen-share/functions.js
Jaya Allamsetty d63e0c5ab6 fix(audio-share): Fix audio-only SS in multi-stream mode.
ShareAudioDialog passes undefined when the user hits continue in the share audio demo modal. Toggle state of audio-share based on the current state of audio share in that case.
2022-08-01 22:12:18 -04:00

68 lines
2.1 KiB
JavaScript

// @flow
import { getMultipleVideoSendingSupportFeatureFlag } from '../base/config';
import { isWindows } from '../base/environment';
import { isMobileBrowser } from '../base/environment/utils';
import { browser } from '../base/lib-jitsi-meet';
import { VIDEO_TYPE } from '../base/media';
import { getLocalDesktopTrack, getLocalVideoTrack } from '../base/tracks';
/**
* Is the current screen sharing session audio only.
*
* @param {Object} state - The state of the application.
* @returns {boolean}
*/
export function isAudioOnlySharing(state: Object) {
return isScreenAudioShared(state) && !isScreenVideoShared(state);
}
/**
* State of audio sharing.
*
* @param {Object} state - The state of the application.
* @returns {boolean}
*/
export function isScreenAudioShared(state: Object) {
return state['features/screen-share'].isSharingAudio;
}
/**
* Returns the visibility of the audio only screen share button. Currently only chrome browser and electron on
* windows supports this functionality.
*
* @returns {boolean}
*/
export function isScreenAudioSupported() {
return (!isMobileBrowser() && browser.isChrome()) || (browser.isElectron() && isWindows());
}
/**
* Is any screen media currently being shared, audio or video.
*
* @param {Object} state - The state of the application.
* @returns {boolean}
*/
export function isScreenMediaShared(state: Object) {
return isScreenAudioShared(state) || isScreenVideoShared(state);
}
/**
* Is screen sharing currently active.
*
* @param {Object} state - The state of the application.
* @returns {boolean}
*/
export function isScreenVideoShared(state: Object) {
const tracks = state['features/base/tracks'];
const localScreenshare = getLocalDesktopTrack(tracks);
if (getMultipleVideoSendingSupportFeatureFlag(state)) {
return localScreenshare && localScreenshare.jitsiTrack && !localScreenshare.jitsiTrack.isMuted();
}
const localVideo = getLocalVideoTrack(tracks);
// $FlowFixMe - No support for optional chain method calls in flow atm.
return localVideo?.jitsiTrack?.getVideoType() === VIDEO_TYPE.DESKTOP;
}