pooliot-client
Version:
188 lines (132 loc) • 6.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.screenshot = exports.update = exports.off = exports.on = exports.getCurrentScreens = exports.getCurrentScreenState = undefined;
var _nightingale = require('nightingale');
var _nightingale2 = _interopRequireDefault(_nightingale);
var _exec = require('../utils/exec');
var _client = require('../client');
var _display = require('./display');
var display = _interopRequireWildcard(_display);
var _screensaver = require('./screensaver');
var screensaver = _interopRequireWildcard(_screensaver);
var _params = require('../params');
var _flowRuntime = require('flow-runtime');
var _flowRuntime2 = _interopRequireDefault(_flowRuntime);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const logger = new _nightingale2.default('app:commands:screen');
const ScreenStateType = _flowRuntime2.default.type('ScreenStateType', _flowRuntime2.default.union(_flowRuntime2.default.string('on'), _flowRuntime2.default.string('off'), _flowRuntime2.default.string('unavailable')));
const getScreens = () => {
const _returnType = _flowRuntime2.default.return(_flowRuntime2.default.array(_flowRuntime2.default.string()));
return _returnType.assert((0, _exec.runSyncAsUser)('./screen.sh', ['screens']).split('\n').filter(Boolean));
};
let _currentScreensType = _flowRuntime2.default.array(_flowRuntime2.default.string()),
currentScreens = _currentScreensType.assert(getScreens());
const getScreenState = () => {
const _returnType2 = _flowRuntime2.default.return(ScreenStateType);
return _returnType2.assert(currentScreens.length === 0 ? 'unavailable' : (0, _exec.runSyncAsUser)('./screen.sh', ['state']));
};
let _currentScreenStateType = ScreenStateType,
currentScreenState = _currentScreenStateType.assert(getScreenState());
// CONFIG
let disableTouchscreenIfHDMIConnected;
let reverseTouchscreen;
logger.info('init', { currentScreens, currentScreenState });
const isTouchscreen = screen => screen.startsWith('DSI');
const isHDMIScreen = screen => screen.startsWith('HDMI');
const updateCurrentScreenState = (newState = getScreenState()) => {
_flowRuntime2.default.param('newState', ScreenStateType).assert(newState);
currentScreens = _currentScreensType.assert(getScreens());
if (currentScreenState !== newState) {
currentScreenState = _currentScreenStateType.assert(newState);
(0, _client.sendUpdate)({
screenState: currentScreenState,
screen: { state: currentScreenState, screens: currentScreens }
});
}
};
const reverseScreen = screen => {
let _screenType = _flowRuntime2.default.string();
_flowRuntime2.default.param('screen', _screenType).assert(screen);
return (0, _exec.runSyncAsUser)('./screen.sh', ['reverse-screen', screen, _params.board.touchscreen]);
};
const turnScreen = state => {
let _stateType = _flowRuntime2.default.union(_flowRuntime2.default.string('on'), _flowRuntime2.default.string('off'));
_flowRuntime2.default.return(_flowRuntime2.default.void());
_flowRuntime2.default.param('state', _stateType).assert(state);
(0, _exec.runSyncAsUser)('./screen.sh', [state]);
updateCurrentScreenState(state);
};
const getCurrentScreenState = exports.getCurrentScreenState = () => {
const _returnType4 = _flowRuntime2.default.return(ScreenStateType);
return _returnType4.assert(currentScreenState);
};
const getCurrentScreens = exports.getCurrentScreens = () => {
const _returnType5 = _flowRuntime2.default.return(_flowRuntime2.default.array(_flowRuntime2.default.string()));
return _returnType5.assert(currentScreens);
};
const on = exports.on = (autoStartDisplay = true) => {
_flowRuntime2.default.return(_flowRuntime2.default.void());
logger.info('turning screen on');
// start display before turning on to avoid blank screen
if (autoStartDisplay) display.start();
(0, _exec.runSync)('./screen.sh', ['root-on']);
turnScreen('on');
screensaver.set();
if (disableTouchscreenIfHDMIConnected || reverseTouchscreen) {
const touchscreens = currentScreens.filter(isTouchscreen);
if (disableTouchscreenIfHDMIConnected && touchscreens.length && currentScreens.length > 1 && currentScreens.some(isHDMIScreen)) {
(0, _exec.runSyncAsUser)('./screen.sh', ['screens-off', ...touchscreens]);
} else if (reverseTouchscreen) {
touchscreens.forEach(reverseScreen);
} else {
(0, _exec.runSyncAsUser)('./screen.sh', ['screens-on', ...touchscreens]);
}
}
};
const off = exports.off = () => {
_flowRuntime2.default.return(_flowRuntime2.default.void());
logger.info('turning screen off');
display.stop();
turnScreen('off');
};
const update = exports.update = (config, firstTime = false) => {
let _configType = _flowRuntime2.default.object();
let _firstTimeType = _flowRuntime2.default.nullable(_flowRuntime2.default.boolean());
_flowRuntime2.default.param('config', _configType).assert(config);
_flowRuntime2.default.param('firstTime', _firstTimeType).assert(firstTime);
if (!display.supports(config.display)) {
logger.warn('display not supported', { display: config.display });
if (config.display !== 'none') off(); // only off if display is not "disabled"
return;
}
if (firstTime) {
(0, _exec.runSyncAsUser)('./screen.sh', ['waitForX']);
}
updateCurrentScreenState();
if (currentScreenState === 'on') {
display.update(config, true);
if (firstTime) {
on(false);
} else if (disableTouchscreenIfHDMIConnected !== config.disableTouchscreenIfHDMIConnected || reverseTouchscreen !== config.reverseTouchscreen) {
disableTouchscreenIfHDMIConnected = config.disableTouchscreenIfHDMIConnected;
reverseTouchscreen = config.reverseTouchscreen;
on(false);
}
screensaver.update(config);
} else {
display.update(config, false);
screensaver.update(config, false);
}
};
const screenshot = exports.screenshot = () => {
if (currentScreenState !== 'on') {
logger.debug('screenshot: screen is not on');
return;
}
logger.info('getting screenshot');
return (0, _exec.runPipeAsUser)('./screen.sh', ['screenshot']);
};
//# sourceMappingURL=screen.js.map