jiti-meet/react/features/blur/actions.js

68 lines
1.9 KiB
JavaScript

// @flow
import { getLocalVideoTrack } from '../../features/base/tracks';
import { BLUR_DISABLED, BLUR_ENABLED } from './actionTypes';
import { getBlurEffect } from './functions';
import logger from './logger';
/**
* Signals the local participant is switching between blurred or non blurred video.
*
* @param {boolean} enabled - If true enables video blur, false otherwise.
* @returns {Promise}
*/
export function toggleBlurEffect(enabled: boolean) {
return function(dispatch: (Object) => Object, getState: () => any) {
const state = getState();
if (state['features/blur'].blurEnabled !== enabled) {
const { jitsiTrack } = getLocalVideoTrack(state['features/base/tracks']);
return getBlurEffect()
.then(blurEffectInstance =>
jitsiTrack.setEffect(enabled ? blurEffectInstance : undefined)
.then(() => {
enabled ? dispatch(blurEnabled()) : dispatch(blurDisabled());
})
.catch(error => {
enabled ? dispatch(blurDisabled()) : dispatch(blurEnabled());
logger.error('setEffect failed with error:', error);
})
)
.catch(error => {
dispatch(blurDisabled());
logger.error('getBlurEffect failed with error:', error);
});
}
return Promise.resolve();
};
}
/**
* Signals the local participant that the blur has been enabled.
*
* @returns {{
* type: BLUR_ENABLED
* }}
*/
export function blurEnabled() {
return {
type: BLUR_ENABLED
};
}
/**
* Signals the local participant that the blur has been disabled.
*
* @returns {{
* type: BLUR_DISABLED
* }}
*/
export function blurDisabled() {
return {
type: BLUR_DISABLED
};
}