jiti-meet/app.js

210 lines
7.0 KiB
JavaScript
Raw Normal View History

2016-12-12 21:13:17 +00:00
/* global $, config, loggingConfig, JitsiMeetJS */
2013-12-16 11:22:23 +00:00
/* application specific logic */
2016-11-11 15:00:54 +00:00
const logger = require("jitsi-meet-logger").getLogger(__filename);
2015-12-04 13:46:25 +00:00
import "babel-polyfill";
2015-12-04 14:57:28 +00:00
import "jquery";
import "jquery-contextmenu";
2015-12-04 14:57:28 +00:00
import "jquery-ui";
import "strophe";
import "strophe-disco";
import "jQuery-Impromptu";
import "autosize";
2016-09-16 03:22:56 +00:00
import 'aui';
import 'aui-experimental';
import 'aui-css';
import 'aui-experimental-css';
2015-09-10 17:15:56 +00:00
window.toastr = require("toastr");
2016-11-21 21:08:39 +00:00
const Logger = require("jitsi-meet-logger");
const LogCollector = Logger.LogCollector;
import JitsiMeetLogStorage from "./modules/util/JitsiMeetLogStorage";
2016-11-21 21:08:39 +00:00
2015-12-14 12:26:50 +00:00
import URLProcessor from "./modules/config/URLProcessor";
2015-12-17 15:31:11 +00:00
2015-12-29 12:41:43 +00:00
import UI from "./modules/UI/UI";
import settings from "./modules/settings/Settings";
2016-01-06 22:39:13 +00:00
import conference from './conference';
import ConferenceUrl from './modules/URL/ConferenceUrl';
2016-01-14 15:05:54 +00:00
import API from './modules/API/API';
2015-12-29 22:30:50 +00:00
2016-11-04 22:35:13 +00:00
import getTokenData from "./modules/tokendata/TokenData";
2016-10-31 22:16:30 +00:00
import translation from "./modules/translation/translation";
2015-12-29 22:30:50 +00:00
2016-11-21 21:08:39 +00:00
/**
* Adjusts the logging levels.
* @private
*/
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(function(loggerName) {
if ('defaultLogLevel' !== loggerName) {
const level = loggingConfig[loggerName];
Logger.setLogLevelById(level, loggerName);
JitsiMeetJS.setLogLevelById(level, loggerName);
}
});
}
}
2015-12-04 14:57:28 +00:00
const APP = {
// Used by do_external_connect.js if we receive the attach data after
// connect was already executed. status property can be "initialized",
// "ready" or "connecting". We are interested in "ready" status only which
// means that connect was executed but we have to wait for the attach data.
// In status "ready" handler property will be set to a function that will
// finish the connect process when the attach data or error is received.
connect: {
status: "initialized",
handler: null
},
2016-04-01 19:44:25 +00:00
// Used for automated performance tests
connectionTimes: {
2016-04-01 19:44:25 +00:00
"index.loaded": window.indexLoadedTime
},
2015-12-29 12:41:43 +00:00
UI,
settings,
2016-01-14 15:05:54 +00:00
conference,
2016-10-31 22:16:30 +00:00
translation,
/**
* The log collector which captures JS console logs for this app.
* @type {LogCollector}
*/
logCollector: null,
/**
* Indicates if the log collector has been started (it will not be started
* if the welcome page is displayed).
*/
logCollectorStarted : false,
/**
* After the APP has been initialized provides utility methods for dealing
* with the conference room URL(address).
* @type ConferenceUrl
*/
ConferenceUrl : null,
2016-04-01 19:44:25 +00:00
connection: null,
2016-01-14 15:05:54 +00:00
API,
2015-12-04 14:57:28 +00:00
init () {
this.initLogging();
this.keyboardshortcut =
require("./modules/keyboardshortcut/keyboardshortcut");
this.configFetch = require("./modules/config/HttpConfigFetch");
2016-06-13 21:11:44 +00:00
this.tokenData = getTokenData();
},
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 (!this.logCollector && !loggingConfig.disableLogCollector) {
this.logCollector = new LogCollector(new JitsiMeetLogStorage());
Logger.addGlobalTransport(this.logCollector);
JitsiMeetJS.addGlobalLogTransport(this.logCollector);
}
}
};
2016-06-13 21:11:44 +00:00
/**
* If JWT token data it will be used for local user settings
*/
function setTokenData() {
let localUser = APP.tokenData.caller;
if(localUser) {
APP.settings.setEmail((localUser.getEmail() || "").trim(), true);
2016-06-13 21:11:44 +00:00
APP.settings.setAvatarUrl((localUser.getAvatarUrl() || "").trim());
APP.settings.setDisplayName((localUser.getName() || "").trim(), true);
2016-06-13 21:11:44 +00:00
}
}
2015-11-30 11:54:54 +00:00
function init() {
2016-06-13 21:11:44 +00:00
setTokenData();
// Initialize the conference URL handler
APP.ConferenceUrl = new ConferenceUrl(window.location);
// TODO The execution of the mobile app starts from react/index.native.js.
// Similarly, the execution of the Web app should start from
// react/index.web.js for the sake of consistency and ease of understanding.
// Temporarily though because we are at the beginning of introducing React
// into the Web app, allow the execution of the Web app to start from app.js
// in order to reduce the complexity of the beginning step.
require('./react');
2013-12-16 11:22:23 +00:00
}
/**
* If we have an HTTP endpoint for getting config.json configured we're going to
* read it and override properties from config.js and interfaceConfig.js.
* If there is no endpoint we'll just continue with initialization.
* Keep in mind that if the endpoint has been configured and we fail to obtain
* the config for any reason then the conference won't start and error message
* will be displayed to the user.
*/
function obtainConfigAndInit() {
2015-12-04 14:57:28 +00:00
let roomName = APP.conference.roomName;
if (config.configLocation) {
APP.configFetch.obtainConfig(
config.configLocation, roomName,
// Get config result callback
function(success, error) {
if (success) {
var now = APP.connectionTimes["configuration.fetched"] =
2016-04-01 19:44:25 +00:00
window.performance.now();
2016-11-11 15:00:54 +00:00
logger.log("(TIME) configuration fetched:\t", now);
init();
} else {
// Show obtain config error,
// pass the error object for report
APP.UI.messageHandler.openReportDialog(
null, "dialog.connectError", error);
}
});
} else {
require("./modules/config/BoshAddressChoice").chooseAddress(
config, roomName);
init();
}
}
2013-12-16 11:22:23 +00:00
$(document).ready(function () {
var now = APP.connectionTimes["document.ready"] = window.performance.now();
2016-11-11 15:00:54 +00:00
logger.log("(TIME) document ready:\t", now);
2015-01-07 14:54:03 +00:00
URLProcessor.setConfigParametersFromUrl();
APP.init();
2016-06-13 21:11:44 +00:00
APP.API.init(APP.tokenData.externalAPISettings);
2015-11-30 11:54:54 +00:00
obtainConfigAndInit();
2013-12-16 11:22:23 +00:00
});
$(window).bind('beforeunload', function () {
// Stop the LogCollector
if (APP.logCollectorStarted) {
APP.logCollector.stop();
APP.logCollectorStarted = false;
}
2016-01-14 15:05:54 +00:00
APP.API.dispose();
2013-12-16 11:22:23 +00:00
});
2015-12-14 12:26:50 +00:00
module.exports = APP;