pooliot-client
Version:
135 lines (105 loc) • 3.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.update = exports.refresh = exports.supports = undefined;
exports.openboxStarted = openboxStarted;
exports.start = start;
exports.restart = restart;
exports.stop = stop;
var _nightingale = require('nightingale');
var _nightingale2 = _interopRequireDefault(_nightingale);
var _config = require('../config');
var _exec = require('./exec');
var _availableDisplays = require('../utils/availableDisplays');
var _availableDisplays2 = _interopRequireDefault(_availableDisplays);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable no-use-before-define */
const logger = new _nightingale2.default('app:display');
let currentDisplay;
let autoRestart;
let displayProcess;
let unclutterProcess;
const displaysCouldUseCursor = ['chromium', 'firefox'];
const supports = exports.supports = config => _availableDisplays2.default.includes(config.display);
const refresh = exports.refresh = () => {
if (displayProcess) {
logger.log('refresh');
const config = (0, _config.get)();
return (0, _exec.runSyncAsUser)(`./${config.display}.sh`, ['refresh']);
} else {
logger.warn('display stopped');
}
};
const update = exports.update = () => {
logger.info('update');
return restart();
};
function startDisplay() {
(0, _exec.runSyncAsUser)('./display.sh', ['stop']);
logger.info('starting child');
if (displayProcess) {
throw new Error('child process already started');
}
autoRestart = true;
const config = (0, _config.get)();
currentDisplay = config.display;
logger.info('start', { display: currentDisplay, url: config.url });
displayProcess = (0, _exec.runAsyncAsUser)(`./${currentDisplay}.sh`, ['start', config.url]);
const thisDisplayProcess = displayProcess;
displayProcess.on('exit', (code, signal) => {
const sameChildProcess = thisDisplayProcess === displayProcess;
displayProcess = null;
logger.error('child process exited', { code, signal });
if (autoRestart && sameChildProcess) {
process.nextTick(() => start());
}
});
const unclutterIdle = displaysCouldUseCursor.includes(currentDisplay) ? 5 : 0;
if (!unclutterProcess) {
unclutterProcess = (0, _exec.runAsyncAsUser)('unclutter', ['-display', ':0', '-idle', unclutterIdle]);
unclutterProcess.on('exit', (code, signal) => {
logger.info('unclutter exited', { code, signal });
unclutterProcess = null;
});
}
}
function openboxStarted() {
logger.success('openbox started');
startDisplay();
}
function start() {
if (displayProcess) {
logger.warn('start: already started');
return;
}
const config = (0, _config.get)();
if (!supports(config)) return;
logger.info('starting...', { config });
// } else if (startOpenBox() !== 'started') {
// logger.info('openbox not yet started');
// } else {
startDisplay();
// }
}
function restart() {
logger.info('restarting...');
stop();
return start();
}
function stop() {
autoRestart = false;
if (displayProcess) {
displayProcess.removeAllListeners();
displayProcess.kill();
}
displayProcess = null;
if (unclutterProcess) {
unclutterProcess.removeAllListeners();
unclutterProcess.kill();
}
unclutterProcess = null;
logger.info('stop', { display: currentDisplay });
(0, _exec.runSyncAsUser)('./display.sh', ['stop']);
}
//# sourceMappingURL=display.js.map
;