123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* @flow */
-
- import { setConfigFromURLParams } from '../../base/config';
- import { loadScript } from '../../base/util';
-
- import JitsiMeetJS from './_';
-
- declare var APP: Object;
-
- const JitsiConnectionErrors = JitsiMeetJS.errors.connection;
-
- /**
- * Creates a JitsiLocalTrack model from the given device id.
- *
- * @param {string} type - The media type of track being created. Expected values
- * are "video" or "audio".
- * @param {string} deviceId - The id of the target media source.
- * @returns {Promise<JitsiLocalTrack>}
- */
- export function createLocalTrack(type: string, deviceId: string) {
- return (
- JitsiMeetJS.createLocalTracks({
- cameraDeviceId: deviceId,
- devices: [ type ],
-
- // eslint-disable-next-line camelcase
- firefox_fake_device:
- window.config && window.config.firefox_fake_device,
- micDeviceId: deviceId
- })
- .then(([ jitsiLocalTrack ]) => jitsiLocalTrack));
- }
-
- /**
- * Determines whether a specific JitsiConnectionErrors instance indicates a
- * fatal JitsiConnection error.
- *
- * FIXME Figure out the category of errors defined by the fucntion and describe
- * that category. I've currently named the category fatal because it appears to
- * be used in the cases of unrecoverable errors that necessitate a reload.
- *
- * @param {string} error - The JitsiConnectionErrors instance to
- * categorize/classify.
- * @returns {boolean} True if the specified JitsiConnectionErrors instance
- * indicates a fatal JitsiConnection error; otherwise, false.
- */
- export function isFatalJitsiConnectionError(error: string) {
- return (
- error === JitsiConnectionErrors.CONNECTION_DROPPED_ERROR
- || error === JitsiConnectionErrors.OTHER_ERROR
- || error === JitsiConnectionErrors.SERVER_ERROR);
- }
-
- /**
- * Loads config.js file from remote server.
- *
- * @param {string} host - Host where config.js is hosted.
- * @param {string} path='/config.js' - Relative pah to config.js file.
- * @returns {Promise<Object>}
- */
- export function loadConfig(host: string, path: string = '/config.js') {
- let promise;
-
- if (typeof APP === 'undefined') {
- promise
- = loadScript(new URL(path, host).toString())
- .then(() => {
- const { config } = window;
-
- // We don't want to pollute global scope.
- window.config = undefined;
-
- if (typeof config !== 'object') {
- throw new Error('window.config is not an object');
- }
-
- return config;
- })
- .catch(err => {
- console.error(`Failed to load ${path} from ${host}`, err);
-
- throw err;
- });
- } else {
- // Return config.js file from global scope. We can't use the version
- // that's being used for the React Native app because the old/current
- // Web app uses config from the global scope.
- promise = Promise.resolve(window.config);
- }
-
- // FIXME It's neither here nor there at the time of this writing where
- // config, interfaceConfig, and loggingConfig should be overwritten by URL
- // params.
- promise = promise.then(value => {
- setConfigFromURLParams();
-
- return value;
- });
-
- return promise;
- }
|