| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 | 
							- // @flow
 - 
 - import { appNavigate } from '../app';
 - import { checkIfCanJoin, conferenceLeft } from '../base/conference';
 - import { openDialog } from '../base/dialog';
 - 
 - import {
 -     CANCEL_LOGIN,
 -     STOP_WAIT_FOR_OWNER,
 -     UPGRADE_ROLE_FINISHED,
 -     UPGRADE_ROLE_STARTED,
 -     WAIT_FOR_OWNER
 - } from './actionTypes';
 - import { LoginDialog, WaitForOwnerDialog } from './components';
 - 
 - const logger = require('jitsi-meet-logger').getLogger(__filename);
 - 
 - /**
 -  * Initiates authenticating and upgrading the role of the local participant to
 -  * moderator which will allow to create and join a new conference on an XMPP
 -  * password + guest access configuration. Refer to {@link LoginDialog} for more
 -  * info.
 -  *
 -  * @param {string} id - The XMPP user's ID (e.g. user@domain.com).
 -  * @param {string} password - The XMPP user's password.
 -  * @param {JitsiConference} conference - The conference for which the local
 -  * participant's role will be upgraded.
 -  * @returns {Function}
 -  */
 - export function authenticateAndUpgradeRole(
 -         id: string,
 -         password: string,
 -         conference: Object) {
 -     return (dispatch: Dispatch, getState: Function) => {
 -         const { password: roomPassword }
 -             = getState()['features/base/conference'];
 -         const process
 -             = conference.authenticateAndUpgradeRole({
 -                 id,
 -                 password,
 -                 roomPassword,
 - 
 -                 onLoginSuccessful() {
 -                     // When the login succeeds, the process has completed half
 -                     // of its job (i.e. 0.5).
 -                     return dispatch(_upgradeRoleFinished(process, 0.5));
 -                 }
 -             });
 - 
 -         dispatch(_upgradeRoleStarted(process));
 -         process.then(
 -             /* onFulfilled */ () => dispatch(_upgradeRoleFinished(process, 1)),
 -             /* onRejected */ error => {
 -                 // The lack of an error signals a cancellation.
 -                 if (error.authenticationError || error.connectionError) {
 -                     logger.error('authenticateAndUpgradeRole failed', error);
 -                 }
 - 
 -                 dispatch(_upgradeRoleFinished(process, error));
 -             });
 - 
 -         return process;
 -     };
 - }
 - 
 - /**
 -  * Cancels {@ink LoginDialog}.
 -  *
 -  * @returns {{
 -  *     type: CANCEL_LOGIN
 -  * }}
 -  */
 - export function cancelLogin() {
 -     return {
 -         type: CANCEL_LOGIN
 -     };
 - }
 - 
 - /**
 -  * Cancels {@link WaitForOwnerDialog}. Will navigate back to the welcome page.
 -  *
 -  * @returns {Function}
 -  */
 - export function cancelWaitForOwner() {
 -     return (dispatch: Dispatch<*>, getState: Function) => {
 -         dispatch(stopWaitForOwner());
 - 
 -         // XXX The error associated with CONFERENCE_FAILED was marked as
 -         // recoverable by the feature room-lock and, consequently,
 -         // recoverable-aware features such as mobile's external-api did not
 -         // deliver the CONFERENCE_FAILED to the SDK clients/consumers. Since the
 -         // app/user is going to nativate to WelcomePage, the SDK
 -         // clients/consumers need an event.
 -         const { authRequired } = getState()['features/base/conference'];
 - 
 -         authRequired && dispatch(conferenceLeft(authRequired));
 - 
 -         dispatch(appNavigate(undefined));
 -     };
 - }
 - 
 - /**
 -  * Opens {@link LoginDialog} which will ask to enter username and password
 -  * for the current conference.
 -  *
 -  * @protected
 -  * @returns {Action}
 -  */
 - export function _openLoginDialog() {
 -     return openDialog(LoginDialog);
 - }
 - 
 - /**
 -  * Opens {@link WaitForOnwerDialog}.
 -  *
 -  * @protected
 -  * @returns {Action}
 -  */
 - export function _openWaitForOwnerDialog() {
 -     return openDialog(WaitForOwnerDialog);
 - }
 - 
 - /**
 -  * Stops waiting for the conference owner.
 -  *
 -  * @returns {{
 -  *     type: STOP_WAIT_FOR_OWNER
 -  * }}
 -  */
 - export function stopWaitForOwner() {
 -     return {
 -         type: STOP_WAIT_FOR_OWNER
 -     };
 - }
 - 
 - /**
 -  * Signals that the process of authenticating and upgrading the local
 -  * participant's role has finished either with success or with a specific error.
 -  *
 -  * @param {Object} thenableWithCancel - The process of authenticating and
 -  * upgrading the local participant's role.
 -  * @param {Object} progressOrError - If the value is a {@code number}, then the
 -  * process of authenticating and upgrading the local participant's role has
 -  * succeeded in one of its two/multiple steps; otherwise, it has failed with the
 -  * specified error. Refer to {@link JitsiConference#authenticateAndUpgradeRole}
 -  * in lib-jitsi-meet for the error details.
 -  * @private
 -  * @returns {{
 -  *     type: UPGRADE_ROLE_FINISHED,
 -  *     error: ?Object,
 -  *     progress: number
 -  * }}
 -  */
 - function _upgradeRoleFinished(
 -         thenableWithCancel,
 -         progressOrError: number | Object) {
 -     let error;
 -     let progress;
 - 
 -     if (typeof progressOrError === 'number') {
 -         progress = progressOrError;
 -     } else {
 -         // Make the specified error object resemble an Error instance (to the
 -         // extent that jitsi-meet needs it).
 -         const {
 -             authenticationError,
 -             connectionError,
 -             ...other
 -         } = progressOrError;
 - 
 -         error = {
 -             name: authenticationError || connectionError,
 -             ...other
 -         };
 -         progress = authenticationError ? 0.5 : 0;
 -     }
 - 
 -     return {
 -         type: UPGRADE_ROLE_FINISHED,
 -         error,
 -         progress,
 -         thenableWithCancel
 -     };
 - }
 - 
 - /**
 -  * Signals that a process of authenticating and upgrading the local
 -  * participant's role has started.
 -  *
 -  * @param {Object} thenableWithCancel - The process of authenticating and
 -  * upgrading the local participant's role.
 -  * @private
 -  * @returns {{
 -  *     type: UPGRADE_ROLE_STARTED,
 -  *     thenableWithCancel: Object
 -  * }}
 -  */
 - function _upgradeRoleStarted(thenableWithCancel) {
 -     return {
 -         type: UPGRADE_ROLE_STARTED,
 -         thenableWithCancel
 -     };
 - }
 - 
 - /**
 -  * Called when Jicofo rejects to create the room for anonymous user. Will
 -  * start the process of "waiting for the owner" by periodically trying to join
 -  * the room every five seconds.
 -  *
 -  * @returns {Function}
 -  */
 - export function waitForOwner() {
 -     return (dispatch: Dispatch) =>
 -         dispatch({
 -             type: WAIT_FOR_OWNER,
 -             handler: () => dispatch(checkIfCanJoin()),
 -             timeoutMs: 5000
 -         });
 - }
 
 
  |