123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /* global APP, JitsiMeetJS, loggingConfig */
- import { isRoomValid } from '../base/conference';
- import { RouteRegistry } from '../base/navigator';
- import { Conference } from '../conference';
- import { WelcomePage } from '../welcome';
-
- import getTokenData from '../../../modules/tokendata/TokenData';
- import settings from '../../../modules/settings/Settings';
-
- import URLProcessor from '../../../modules/config/URLProcessor';
- import JitsiMeetLogStorage from '../../../modules/util/JitsiMeetLogStorage';
-
- // eslint-disable-next-line max-len
- import KeyboardShortcut from '../../../modules/keyboardshortcut/keyboardshortcut';
-
- const Logger = require('jitsi-meet-logger');
- const LogCollector = Logger.LogCollector;
-
-
- /**
- * Gets room name and domain from URL object.
- *
- * @param {URL} url - URL object.
- * @private
- * @returns {{
- * domain: (string|undefined),
- * room: (string|undefined)
- * }}
- */
- function _getRoomAndDomainFromUrlObject(url) {
- let domain;
- let room;
-
- if (url) {
- domain = url.hostname;
- room = url.pathname.substr(1);
-
- // Convert empty string to undefined to simplify checks.
- if (room === '') {
- room = undefined;
- }
- if (domain === '') {
- domain = undefined;
- }
- }
-
- return {
- domain,
- room
- };
- }
-
- /**
- * Gets conference room name and connection domain from URL.
- *
- * @param {(string|undefined)} url - URL.
- * @returns {{
- * domain: (string|undefined),
- * room: (string|undefined)
- * }}
- */
- export function _getRoomAndDomainFromUrlString(url) {
- // Rewrite the specified URL in order to handle special cases such as
- // hipchat.com and enso.me which do not follow the common pattern of most
- // Jitsi Meet deployments.
- if (typeof url === 'string') {
- // hipchat.com
- let regex = /^(https?):\/\/hipchat.com\/video\/call\//gi;
- let match = regex.exec(url);
-
- if (!match) {
- // enso.me
- regex = /^(https?):\/\/enso\.me\/(?:call|meeting)\//gi;
- match = regex.exec(url);
- }
- if (match && match.length > 1) {
- /* eslint-disable no-param-reassign, prefer-template */
-
- url
- = match[1] /* URL protocol */
- + '://enso.hipchat.me/'
- + url.substring(regex.lastIndex);
-
- /* eslint-enable no-param-reassign, prefer-template */
- }
- }
-
- return _getRoomAndDomainFromUrlObject(_urlStringToObject(url));
- }
-
- /**
- * Determines which route is to be rendered in order to depict a specific Redux
- * store.
- *
- * @param {(Object|Function)} stateOrGetState - Redux state or Regux getState()
- * method.
- * @returns {Route}
- */
- export function _getRouteToRender(stateOrGetState) {
- const state
- = typeof stateOrGetState === 'function'
- ? stateOrGetState()
- : stateOrGetState;
- const room = state['features/base/conference'].room;
- const component = isRoomValid(room) ? Conference : WelcomePage;
-
- return RouteRegistry.getRouteByComponent(component);
- }
-
- /**
- * Parses a string into a URL (object).
- *
- * @param {(string|undefined)} url - The URL to parse.
- * @private
- * @returns {URL}
- */
- function _urlStringToObject(url) {
- let urlObj;
-
- if (url) {
- try {
- urlObj = new URL(url);
- } catch (ex) {
- // The return value will signal the failure & the logged
- // exception will provide the details to the developers.
- console.log(`${url} seems to be not a valid URL, but it's OK`, ex);
- }
- }
-
- return urlObj;
- }
-
- /**
- * Temporary solution. Later we'll get rid of global APP
- * and set its properties in redux store.
- *
- * @returns {void}
- */
- export function init() {
- _setConfigParametersFromUrl();
- _initLogging();
-
- APP.keyboardshortcut = KeyboardShortcut;
- APP.tokenData = getTokenData();
- APP.API.init(APP.tokenData.externalAPISettings);
-
- APP.translation.init(settings.getLanguage());
- }
-
- /**
- * Initializes logging in the app.
- *
- * @private
- * @returns {void}
- */
- function _initLogging() {
- // Adjust logging level
- configureLoggingLevels();
-
- // Create the LogCollector and register it as the global log transport.
- // It is done early to capture as much logs as possible. Captured logs
- // will be cached, before the JitsiMeetLogStorage gets ready (statistics
- // module is initialized).
- if (!APP.logCollector && !loggingConfig.disableLogCollector) {
- APP.logCollector = new LogCollector(new JitsiMeetLogStorage());
- Logger.addGlobalTransport(APP.logCollector);
- JitsiMeetJS.addGlobalLogTransport(APP.logCollector);
- }
- }
-
- /**
- * Adjusts the logging levels.
- *
- * @private
- * @returns {void}
- */
- function configureLoggingLevels() {
- // NOTE The library Logger is separated from
- // the app loggers, so the levels
- // have to be set in two places
-
- // Set default logging level
- const defaultLogLevel
- = loggingConfig.defaultLogLevel || JitsiMeetJS.logLevels.TRACE;
-
- Logger.setLogLevel(defaultLogLevel);
- JitsiMeetJS.setLogLevel(defaultLogLevel);
-
- // NOTE console was used on purpose here to go around the logging
- // and always print the default logging level to the console
- console.info(`Default logging level set to: ${defaultLogLevel}`);
-
- // Set log level for each logger
- if (loggingConfig) {
- Object.keys(loggingConfig).forEach(loggerName => {
- if (loggerName !== 'defaultLogLevel') {
- const level = loggingConfig[loggerName];
-
- Logger.setLogLevelById(level, loggerName);
- JitsiMeetJS.setLogLevelById(level, loggerName);
- }
- });
- }
- }
-
- /**
- * Sets config parameters from query string.
- *
- * @private
- * @returns {void}
- */
- function _setConfigParametersFromUrl() {
- URLProcessor.setConfigParametersFromUrl();
- }
|