|
|
|
@ -21,31 +21,13 @@ const logger = require('jitsi-meet-logger').getLogger(__filename); |
|
|
|
|
* Middleware that captures conference failed and checks for password required |
|
|
|
|
* error and requests a dialog for user to enter password. |
|
|
|
|
* |
|
|
|
|
* @param {Store} store - Redux store. |
|
|
|
|
* @param {Store} store - The redux store. |
|
|
|
|
* @returns {Function} |
|
|
|
|
*/ |
|
|
|
|
MiddlewareRegistry.register(store => next => action => { |
|
|
|
|
switch (action.type) { |
|
|
|
|
case CONFERENCE_FAILED: { |
|
|
|
|
const { conference, error } = action; |
|
|
|
|
|
|
|
|
|
if (conference |
|
|
|
|
&& error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) { |
|
|
|
|
// XXX The feature room-lock affords recovery after
|
|
|
|
|
// CONFERENCE_FAILED caused by
|
|
|
|
|
// JitsiConferenceErrors.PASSWORD_REQUIRED.
|
|
|
|
|
if (typeof error.recoverable === 'undefined') { |
|
|
|
|
error.recoverable = true; |
|
|
|
|
} |
|
|
|
|
if (error.recoverable) { |
|
|
|
|
store.dispatch(_openPasswordRequiredPrompt(conference)); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
store.dispatch(hideDialog(PasswordRequiredPrompt)); |
|
|
|
|
store.dispatch(hideDialog(RoomLockPrompt)); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case CONFERENCE_FAILED: |
|
|
|
|
return _conferenceFailed(store, next, action); |
|
|
|
|
|
|
|
|
|
case LOCK_STATE_CHANGED: |
|
|
|
|
// TODO Remove this logic when all components interested in the lock
|
|
|
|
@ -62,18 +44,49 @@ MiddlewareRegistry.register(store => next => action => { |
|
|
|
|
return next(action); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Handles errors that occur when a conference fails. |
|
|
|
|
* |
|
|
|
|
* @param {Store} store - The redux store in which the specified action is being |
|
|
|
|
* dispatched. |
|
|
|
|
* @param {Dispatch} next - The redux {@code dispatch} function to dispatch the |
|
|
|
|
* specified action to the specified store. |
|
|
|
|
* @param {Action} action - The redux action {@code CONFERENCE_FAILED} which |
|
|
|
|
* specifies the details associated with the error and the failed conference. |
|
|
|
|
* @private |
|
|
|
|
* @returns {*} |
|
|
|
|
*/ |
|
|
|
|
function _conferenceFailed({ dispatch }, next, action) { |
|
|
|
|
const { conference, error } = action; |
|
|
|
|
|
|
|
|
|
if (conference && error.name === JitsiConferenceErrors.PASSWORD_REQUIRED) { |
|
|
|
|
// XXX The feature room-lock affords recovery after CONFERENCE_FAILED
|
|
|
|
|
// caused by JitsiConferenceErrors.PASSWORD_REQUIRED.
|
|
|
|
|
if (typeof error.recoverable === 'undefined') { |
|
|
|
|
error.recoverable = true; |
|
|
|
|
} |
|
|
|
|
if (error.recoverable) { |
|
|
|
|
dispatch(_openPasswordRequiredPrompt(conference)); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
dispatch(hideDialog(PasswordRequiredPrompt)); |
|
|
|
|
dispatch(hideDialog(RoomLockPrompt)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return next(action); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Handles errors that occur when a password fails to be set. |
|
|
|
|
* |
|
|
|
|
* @param {Store} store - The Redux store in which the specified action is being |
|
|
|
|
* @param {Store} store - The redux store in which the specified action is being |
|
|
|
|
* dispatched. |
|
|
|
|
* @param {Dispatch} next - The Redux dispatch function to dispatch the |
|
|
|
|
* @param {Dispatch} next - The redux {@code dispatch} function to dispatch the |
|
|
|
|
* specified action to the specified store. |
|
|
|
|
* @param {Action} action - The Redux action SET_PASSWORD_ERROR which has the |
|
|
|
|
* error type that should be handled. |
|
|
|
|
* @param {Action} action - The redux action {@code SET_PASSWORD_ERROR} which |
|
|
|
|
* has the error type that should be handled. |
|
|
|
|
* @private |
|
|
|
|
* @returns {Object} The new state that is the result of the reduction of the |
|
|
|
|
* specified action. |
|
|
|
|
* @returns {*} |
|
|
|
|
*/ |
|
|
|
|
function _setPasswordFailed(store, next, action) { |
|
|
|
|
if (typeof APP !== 'undefined') { |
|
|
|
|