mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 11:22:31 +00:00
Introduced new actions and functions for app initialization
This commit is contained in:
214
react/features/app/functions.web.js
Normal file
214
react/features/app/functions.web.js
Normal file
@@ -0,0 +1,214 @@
|
||||
/* 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();
|
||||
}
|
||||
Reference in New Issue
Block a user