| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /* eslint-disable lines-around-comment */
- import { IReduxState, IStore } from '../../app/types';
- // @ts-ignore
- import { setPictureInPictureEnabled } from '../../mobile/picture-in-picture/functions';
- import { setAudioOnly } from '../audio-only/actions';
- import JitsiMeetJS from '../lib-jitsi-meet';
-
- import { destroyLocalDesktopTrackIfExists, replaceLocalTrack } from './actions.any';
- import { getLocalVideoTrack, isLocalVideoTrackDesktop } from './functions';
- /* eslint-enable lines-around-comment */
-
- export * from './actions.any';
-
- /**
- * Signals that the local participant is ending screensharing or beginning the screensharing flow.
- *
- * @param {boolean} enabled - The state to toggle screen sharing to.
- * @returns {Function}
- */
- export function toggleScreensharing(enabled: boolean) {
- return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
- const state = getState();
-
- if (enabled) {
- const isSharing = isLocalVideoTrackDesktop(state);
-
- if (!isSharing) {
- _startScreenSharing(dispatch, state);
- }
- } else {
- dispatch(destroyLocalDesktopTrackIfExists());
- setPictureInPictureEnabled(true);
- }
- };
- }
-
- /**
- * Creates desktop track and replaces the local one.
- *
- * @private
- * @param {Dispatch} dispatch - The redux {@code dispatch} function.
- * @param {Object} state - The redux state.
- * @returns {void}
- */
- function _startScreenSharing(dispatch: Function, state: IReduxState) {
- setPictureInPictureEnabled(false);
-
- JitsiMeetJS.createLocalTracks({ devices: [ 'desktop' ] })
- .then((tracks: any[]) => {
- const track = tracks[0];
- const currentLocalTrack = getLocalVideoTrack(state['features/base/tracks']);
- const currentJitsiTrack = currentLocalTrack?.jitsiTrack;
-
- dispatch(replaceLocalTrack(currentJitsiTrack, track));
-
- const { enabled: audioOnly } = state['features/base/audio-only'];
-
- if (audioOnly) {
- dispatch(setAudioOnly(false));
- }
- })
- .catch((error: any) => {
- console.log('ERROR creating ScreeSharing stream ', error);
-
- setPictureInPictureEnabled(true);
- });
- }
|