Files
jitsi-meet/react/features/base/connection/reducer.js
Lyubomir Marinov d55e0f70d9 Import jitsi/jitsi-meet-react#2f23d98
As an intermediate step on the path to merging jitsi-meet and
jitsi-meet-react, import the whole source code of jitsi-meet-react as it
stands at
2f23d98424
i.e. the lastest master at the time of this import. No modifications are
applied to the imported source code in order to preserve a complete
snapshot of it in the repository of jitsi-meet and, thus, facilitate
comparison later on. Consequently, the source code of jitsi-meet and/or
jitsi-meet-react may not work. For example, jitsi-meet's jshint may be
unable to parse jitsi-meet-react's source code.
2016-10-12 10:31:52 -05:00

101 lines
2.6 KiB
JavaScript

import { ReducerRegistry } from '../redux';
import {
CONNECTION_DISCONNECTED,
CONNECTION_ESTABLISHED,
SET_DOMAIN
} from './actionTypes';
/**
* Initial Redux state.
*
* @type {{
* jitsiConnection: (JitsiConnection|null),
* connectionOptions: Object
* }}
*/
const INITIAL_STATE = {
jitsiConnection: null,
connectionOptions: null
};
/**
* Listen for actions that contain the connection object, so that
* it can be stored for use by other action creators.
*/
ReducerRegistry.register('features/base/connection',
(state = INITIAL_STATE, action) => {
switch (action.type) {
case CONNECTION_DISCONNECTED:
if (state.jitsiConnection === action.connection) {
return {
...state,
jitsiConnection: null
};
}
return state;
case CONNECTION_ESTABLISHED:
return {
...state,
jitsiConnection: action.connection
};
case SET_DOMAIN:
return {
...state,
connectionOptions: {
...(state.connectionOptions || {}),
...buildConnectionOptions(action.domain)
}
};
default:
return state;
}
});
/**
* Builds connection options based on domain.
*
* @param {string} domain - Domain name.
* @returns {Object}
*/
function buildConnectionOptions(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;
}
}
if (!boshProtocol) {
boshProtocol = 'http:';
}
}
// Default to the HTTPS scheme for the BOSH URL.
if (!boshProtocol) {
boshProtocol = 'https:';
}
return {
bosh: `${boshProtocol}//${domain}/http-bind`,
hosts: {
domain,
focus: `focus.${domain}`,
muc: `conference.${domain}`
}
};
}