123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // @flow
-
- import type { Dispatch } from 'redux';
-
- import {
- appNavigate,
- maybeRedirectToWelcomePage
- } from '../app';
- import {
- conferenceLeft,
- JITSI_CONFERENCE_URL_KEY,
- setPassword
- } from '../base/conference';
- import { hideDialog, openDialog } from '../base/dialog';
- import { PasswordRequiredPrompt, RoomLockPrompt } from './components';
-
- declare var APP: Object;
-
- /**
- * Begins a (user) request to lock a specific conference/room.
- *
- * @param {JitsiConference|undefined} conference - The JitsiConference to lock
- * if specified or undefined if the current JitsiConference is to be locked.
- * @returns {Function}
- */
- export function beginRoomLockRequest(conference: ?Object) {
- return (dispatch: Function, getState: Function) => {
- if (typeof conference === 'undefined') {
- // eslint-disable-next-line no-param-reassign
- conference = getState()['features/base/conference'].conference;
- }
- if (conference) {
- const passwordNumberOfDigits = getState()['features/base/config'].roomPasswordNumberOfDigits;
-
- dispatch(openDialog(RoomLockPrompt, {
- conference,
- passwordNumberOfDigits }));
- }
- };
- }
-
- /**
- * Cancels a prompt for a password to join a specific conference/room.
- *
- * @param {JitsiConference} conference - The {@code JitsiConference} requesting
- * the password to join.
- * @protected
- * @returns {Function}
- */
- export function _cancelPasswordRequiredPrompt(conference: Object) {
- return (dispatch: Dispatch<any>, getState: Function) => {
-
- if (typeof APP !== 'undefined') {
- // when we are redirecting the library should handle any
- // unload and clean of the connection.
- APP.API.notifyReadyToClose();
- dispatch(maybeRedirectToWelcomePage());
-
- return;
- }
-
- // Canceling PasswordRequiredPrompt is to navigate the app/user to
- // WelcomePage. In other words, the canceling invalidates the
- // locationURL. Make sure that the canceling indeed has the intent to
- // invalidate the locationURL.
- const state = getState();
-
- if (conference === state['features/base/conference'].passwordRequired
- && conference[JITSI_CONFERENCE_URL_KEY]
- === state['features/base/connection'].locationURL) {
- // 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.
- dispatch(conferenceLeft(conference));
-
- dispatch(appNavigate(undefined));
- }
- };
- }
-
- /**
- * Ends a (user) request to lock a specific conference/room.
- *
- * @param {JitsiConference} conference - The JitsiConference to lock.
- * @param {string|undefined} password - The password with which the specified
- * conference is to be locked or undefined to cancel the (user) request to lock
- * the specified conference.
- * @returns {Function}
- */
- export function endRoomLockRequest(
- conference: { lock: Function },
- password: ?string) {
- return (dispatch: Function) => {
- const setPassword_
- = password
- ? dispatch(setPassword(conference, conference.lock, password))
- : Promise.resolve();
- const endRoomLockRequest_ = () => dispatch(hideDialog(RoomLockPrompt));
-
- setPassword_.then(endRoomLockRequest_, endRoomLockRequest_);
- };
- }
-
- /**
- * Begins a prompt for a password to join a specific conference/room.
- *
- * @param {JitsiConference} conference - The {@code JitsiConference}
- * requesting the password to join.
- * @protected
- * @returns {{
- * type: OPEN_DIALOG,
- * component: Component,
- * props: PropTypes
- * }}
- */
- export function _openPasswordRequiredPrompt(conference: Object) {
- return openDialog(PasswordRequiredPrompt, { conference });
- }
-
- /**
- * Unlocks the current jitsi conference.
- *
- * @returns {Function}
- */
- export function unlockRoom() {
- return (dispatch: Dispatch<any>, getState: Function) => {
- const { conference } = getState()['features/base/conference'];
-
- return dispatch(setPassword(
- conference,
- conference.lock,
- ''
- ));
- };
- }
|