123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { ReducerRegistry, setStateProperty } from '../redux';
-
- import {
- CONNECTION_DISCONNECTED,
- CONNECTION_ESTABLISHED,
- SET_DOMAIN
- } from './actionTypes';
-
- /**
- * Reduces the Redux actions of the feature base/connection.
- */
- ReducerRegistry.register('features/base/connection', (state = {}, action) => {
- switch (action.type) {
- case CONNECTION_DISCONNECTED:
- return _connectionDisconnected(state, action);
-
- case CONNECTION_ESTABLISHED:
- return _connectionEstablished(state, action);
-
- case SET_DOMAIN:
- return _setDomain(state, action);
- }
-
- return state;
- });
-
- /**
- * Reduces a specific Redux action CONNECTION_DISCONNECTED of the feature
- * base/connection.
- *
- * @param {Object} state - The Redux state of the feature base/connection.
- * @param {Action} action - The Redux action CONNECTION_DISCONNECTED to reduce.
- * @private
- * @returns {Object} The new state of the feature base/connection after the
- * reduction of the specified action.
- */
- function _connectionDisconnected(state, action) {
- if (state.jitsiConnection === action.connection) {
- return setStateProperty(state, 'jitsiConnection', undefined);
- }
-
- return state;
- }
-
- /**
- * Reduces a specific Redux action CONNECTION_ESTABLISHED of the feature
- * base/connection.
- *
- * @param {Object} state - The Redux state of the feature base/connection.
- * @param {Action} action - The Redux action CONNECTION_ESTABLISHED to reduce.
- * @private
- * @returns {Object} The new state of the feature base/connection after the
- * reduction of the specified action.
- */
- function _connectionEstablished(state, action) {
- return setStateProperty(state, 'jitsiConnection', action.connection);
- }
-
- /**
- * Constructs options to be passed to the constructor of JitsiConnection based
- * on a specific domain.
- *
- * @param {string} domain - The domain with which the returned options are to be
- * populated.
- * @returns {Object}
- */
- function _constructConnectionOptions(domain) {
- // FIXME The HTTPS scheme for the BOSH URL works with meet.jit.si on both
- // mobile & Web. It also works with beta.meet.jit.si on Web. Unfortunately,
- // it doesn't work with beta.meet.jit.si on mobile. Temporarily, use the
- // HTTP scheme for the BOSH URL with beta.meet.jit.si on mobile.
- let boshProtocol;
-
- if (domain === 'beta.meet.jit.si') {
- if (typeof window === 'object') {
- const windowLocation = window.location;
-
- if (windowLocation) {
- // React Native doesn't have a window.location at the time of
- // this writing, let alone a window.location.protocol.
- boshProtocol = windowLocation.protocol;
- }
- }
- boshProtocol || (boshProtocol = 'http:');
- }
-
- // Default to the HTTPS scheme for the BOSH URL.
- boshProtocol || (boshProtocol = 'https:');
-
- return {
- bosh: `${boshProtocol}//${domain}/http-bind`,
- hosts: {
- domain,
- focus: `focus.${domain}`,
- muc: `conference.${domain}`
- }
- };
- }
-
- /**
- * Reduces a specific Redux action SET_DOMAIN of the feature base/connection.
- *
- * @param {Object} state - The Redux state of the feature base/connection.
- * @param {Action} action - The Redux action SET_DOMAIN to reduce.
- * @private
- * @returns {Object} The new state of the feature base/connection after the
- * reduction of the specified action.
- */
- function _setDomain(state, action) {
- return {
- ...state,
- connectionOptions: {
- ...state.connectionOptions,
- ..._constructConnectionOptions(action.domain)
- }
- };
- }
|