UNPKG

pooliot-client

Version:
188 lines (132 loc) 6.5 kB
'use strict'; 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