123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /* @flow */
-
- import {
- SET_AUDIO_AVAILABLE,
- SET_AUDIO_MUTED,
- SET_VIDEO_AVAILABLE,
- SET_VIDEO_MUTED } from '../base/media';
- import { MiddlewareRegistry } from '../base/redux';
-
- import { setToolbarButton } from './actions';
- import { CLEAR_TOOLBOX_TIMEOUT, SET_TOOLBOX_TIMEOUT } from './actionTypes';
-
- /**
- * Middleware which intercepts Toolbox actions to handle changes to the
- * visibility timeout of the Toolbox.
- *
- * @param {Store} store - The redux store.
- * @returns {Function}
- */
- MiddlewareRegistry.register(store => next => action => {
- switch (action.type) {
- case CLEAR_TOOLBOX_TIMEOUT: {
- const { timeoutID } = store.getState()['features/toolbox'];
-
- clearTimeout(timeoutID);
- break;
- }
-
- case SET_TOOLBOX_TIMEOUT: {
- const { timeoutID } = store.getState()['features/toolbox'];
- const { handler, timeoutMS } = action;
-
- clearTimeout(timeoutID);
- const newTimeoutId = setTimeout(handler, timeoutMS);
-
- action.timeoutID = newTimeoutId;
- break;
- }
-
- case SET_AUDIO_AVAILABLE:
- case SET_AUDIO_MUTED: {
- return _setAudioAvailableOrMuted(store, next, action);
- }
-
- case SET_VIDEO_AVAILABLE:
- case SET_VIDEO_MUTED:
- return _setVideoAvailableOrMuted(store, next, action);
- }
-
- return next(action);
- });
-
- /**
- * Adjusts the state of toolbar's microphone button.
- *
- * @param {Store} store - The Redux store instance.
- * @param {Function} next - The redux function to continue dispatching the
- * specified {@code action} in the specified {@code store}.
- * @param {Object} action - Either SET_AUDIO_AVAILABLE or SET_AUDIO_MUTED.
- *
- * @returns {*}
- */
- function _setAudioAvailableOrMuted({ dispatch, getState }, next, action) {
- const result = next(action);
-
- const { available, muted } = getState()['features/base/media'].audio;
- const i18nKey = available ? 'mute' : 'micDisabled';
-
- dispatch(setToolbarButton('microphone', {
- enabled: available,
- i18n: `[content]toolbar.${i18nKey}`,
- toggled: available ? muted : true
- }));
-
- return result;
- }
-
- /**
- * Adjusts the state of toolbar's camera button.
- *
- * @param {Store} store - The redux store.
- * @param {Function} next - The redux function to continue dispatching the
- * specified {@code action} in the specified {@code store}.
- * @param {Object} action - Either {@link SET_VIDEO_AVAILABLE} or
- * {@link SET_VIDEO_MUTED}.
- * @returns {Object} The new state that is the result of the reduction of the
- * specified {@code action}.
- */
- function _setVideoAvailableOrMuted({ dispatch, getState }, next, action) {
- const result = next(action);
-
- const { available, muted } = getState()['features/base/media'].video;
- const i18nKey = available ? 'videomute' : 'cameraDisabled';
-
- dispatch(setToolbarButton('camera', {
- enabled: available,
- i18n: `[content]toolbar.${i18nKey}`,
- toggled: available ? muted : true
- }));
-
- return result;
- }
|