Telegram Web, preconfigured for usage in I2P. http://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
2.2 KiB

11 years ago
var log = require('./logger').create('launcher');
var baseBrowserDecoratorFactory = require('./launchers/Base').decoratorFactory;
var Launcher = function(emitter, injector) {
var browsers = [];
this.launch = function(names, hostname, port, urlRoot) {
var url = 'http://' + hostname + ':' + port + urlRoot;
var browser;
names.forEach(function(name) {
var locals = {
id: ['value', Launcher.generateId()],
name: ['value', name],
baseBrowserDecorator: ['factory', baseBrowserDecoratorFactory]
};
// TODO(vojta): determine script from name
if (name.indexOf('/') !== -1) {
name = 'Script';
}
try {
browser = injector.createChild([locals], ['launcher:' + name]).get('launcher:' + name);
} catch (e) {
if (e.message.indexOf('No provider for "launcher:' + name + '"') !== -1) {
log.warn('Can not load "%s", it is not registered!\n ' +
'Perhaps you are missing some plugin?', name);
} else {
log.warn('Can not load "%s"!\n ' + e.stack, name);
}
return;
}
log.info('Starting browser %s', browser.name);
browser.start(url);
browsers.push(browser);
});
};
this.launch.$inject = ['config.browsers', 'config.hostname', 'config.port', 'config.urlRoot'];
this.kill = function(callback) {
log.debug('Disconnecting all browsers');
var remaining = 0;
var finish = function() {
remaining--;
if (!remaining && callback) {
callback();
}
};
if (!browsers.length) {
return process.nextTick(callback);
}
browsers.forEach(function(browser) {
remaining++;
browser.kill(finish);
});
};
this.areAllCaptured = function() {
return !browsers.some(function(browser) {
return !browser.isCaptured();
});
};
this.markCaptured = function(id) {
browsers.forEach(function(browser) {
if (browser.id === id) {
browser.markCaptured();
}
});
};
// register events
emitter.on('exit', this.kill);
};
Launcher.$inject = ['emitter', 'injector'];
Launcher.generateId = function() {
return Math.floor(Math.random() * 100000000);
};
// PUBLISH
exports.Launcher = Launcher;