123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- // @flow
-
- import { CONFERENCE_FAILED } from '../base/conference';
- import {
- CONNECTION_ESTABLISHED,
- CONNECTION_FAILED,
- CONNECTION_WILL_CONNECT
- } from '../base/connection';
- import {
- isFatalJitsiConnectionError,
- JitsiConferenceErrors,
- JitsiConnectionErrors
- } from '../base/lib-jitsi-meet';
- import { assign, ReducerRegistry, set } from '../base/redux';
-
- import {
- MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED,
- SUSPEND_DETECTED
- } from './actionTypes';
-
- const logger = require('jitsi-meet-logger').getLogger(__filename);
-
- /**
- * Reduces the redux actions of the feature overlay.
- */
- ReducerRegistry.register('features/overlay', (state = {}, action) => {
- switch (action.type) {
- case CONFERENCE_FAILED:
- return _conferenceFailed(state, action);
-
- case CONNECTION_ESTABLISHED:
- return _connectionEstablished(state);
-
- case CONNECTION_FAILED:
- return _connectionFailed(state, action);
-
- case CONNECTION_WILL_CONNECT:
- return _connectionWillConnect(state, action);
-
- case MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED:
- return _mediaPermissionPromptVisibilityChanged(state, action);
-
- case SUSPEND_DETECTED:
- return _suspendDetected(state);
- }
-
- return state;
- });
-
- /**
- * Reduces a specific redux action CONFERENCE_FAILED of the feature overlay.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @param {Action} action - The redux action CONFERENCE_FAILED to reduce.
- * @private
- * @returns {Object} The new state of the feature overlay after the reduction of
- * the specified action.
- */
- function _conferenceFailed(state, { error: { message, name } }) {
- if (name === JitsiConferenceErrors.FOCUS_LEFT
- || name === JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE) {
- return assign(state, {
- haveToReload: true,
- isNetworkFailure: false,
-
- // FIXME There is no message associated with CONFERENCE_FAILED at
- // the time of this writing. In jitsi-meet the action creator
- // conferenceFailed neither accepts an argument message nor defines
- // a property message on the error. In lib-jitsi-meet
- // CONFERENCE_FAILED emissions mostly do not provide a message with
- // the exception of at least one which provides an Error, not a
- // string.
- reason: message
- });
- }
-
- return state;
- }
-
- /**
- * Reduces a specific redux action CONNECTION_ESTABLISHED of the feature
- * overlay.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @private
- * @returns {Object} The new state of the feature overlay after the reduction of
- * the specified action.
- */
- function _connectionEstablished(state) {
- return set(state, 'connectionEstablished', true);
- }
-
- /**
- * Reduces a specific redux action CONNECTION_FAILED of the feature overlay.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @param {Action} action - The redux action CONNECTION_FAILED to reduce.
- * @private
- * @returns {Object} The new state of the feature overlay after the reduction of
- * the specified action.
- */
- function _connectionFailed(state, { error }) {
- if (isFatalJitsiConnectionError(error)) {
- const { message } = error;
-
- logger.error(`FATAL XMPP connection error: ${message}`);
-
- return assign(state, {
- haveToReload: true,
-
- // From all of the cases above only CONNECTION_DROPPED_ERROR is
- // considered a network type of failure.
- isNetworkFailure:
- error.name === JitsiConnectionErrors.CONNECTION_DROPPED_ERROR,
- reason: `xmpp-conn-dropped: ${message}`
- });
- }
-
- return state;
- }
-
- /**
- * Reduces a specific redux action CONNECTION_WILL_CONNECT in the feature
- * overlay. Clears the redux state related to the XMPP connection's status.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @param {Action} action - The redux action to reduce.
- * @private
- * @returns {Object} The new state of the feature overlay after reducing the
- * specified {@code action} in the feature overlay.
- */
- function _connectionWillConnect(
- state,
- action) { // eslint-disable-line no-unused-vars
- return assign(state, {
- connectionEstablished: undefined,
- haveToReload: undefined,
- isNetworkFailure: undefined,
- reason: undefined
- });
- }
-
- /**
- * Reduces a specific redux action MEDIA_PERMISSION_PROMPT_VISIBILITY_CHANGED of
- * the feature overlay.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @param {Action} action - The redux action to reduce.
- * @private
- * @returns {Object} The new state of the feature overlay after the reduction of
- * the specified action.
- */
- function _mediaPermissionPromptVisibilityChanged(
- state,
- { browser, isVisible }) {
- return assign(state, {
- browser,
- isMediaPermissionPromptVisible: isVisible
- });
- }
-
- /**
- * Reduces a specific redux action SUSPEND_DETECTED of the feature overlay.
- *
- * @param {Object} state - The redux state of the feature overlay.
- * @private
- * @returns {Object} The new state of the feature overlay after the reduction of
- * the specified action.
- */
- function _suspendDetected(state) {
- return set(state, 'suspendDetected', true);
- }
|