123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // @flow
-
- import { getLocalVideoTrack } from '../../features/base/tracks';
- import { createScreenshotCaptureEffect } from '../stream-effects/screenshot-capture';
-
- import { SET_SCREENSHOT_CAPTURE } from './actionTypes';
- import logger from './logger';
-
- let ongoingEffect;
-
- /**
- * Marks the on-off state of screenshot captures.
- *
- * @param {boolean} enabled - Whether to turn screen captures on or off.
- * @returns {{
- * type: START_SCREENSHOT_CAPTURE,
- * payload: enabled
- * }}
- */
- function setScreenshotCapture(enabled) {
- return {
- type: SET_SCREENSHOT_CAPTURE,
- payload: enabled
- };
- }
-
- /**
- * Action that toggles the screenshot captures.
- *
- * @param {boolean} enabled - Bool that represents the intention to start/stop screenshot captures.
- * @returns {Promise}
- */
- export function toggleScreenshotCaptureEffect(enabled: boolean) {
- return async function(dispatch: (Object) => Object, getState: () => any) {
- const state = getState();
-
- if (state['features/screenshot-capture'].capturesEnabled !== enabled) {
- const { jitsiTrack } = getLocalVideoTrack(state['features/base/tracks']);
-
- if (!ongoingEffect) {
- ongoingEffect = await createScreenshotCaptureEffect(state);
- }
-
- // Screenshot capture effect doesn't return a modified stream. Therefore, we don't have to
- // switch the stream at the conference level, starting/stopping the effect will suffice here.
- if (enabled) {
- try {
- await ongoingEffect.startEffect(
- jitsiTrack.getOriginalStream(),
- jitsiTrack.videoType
- );
- dispatch(setScreenshotCapture(enabled));
- } catch {
-
- // Handle promise rejection from {@code startEffect} due to stream type not being desktop.
- logger.error('Unsupported stream type.');
- }
- } else {
- ongoingEffect.stopEffect();
- dispatch(setScreenshotCapture(enabled));
- }
- }
-
- return Promise.resolve();
- };
- }
|