UNPKG

3.89 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.stop = exports.restart = exports.start = exports.openboxStarted = exports.update = exports.refresh = exports.supports = undefined;
7
8var _nightingale = require('nightingale');
9
10var _nightingale2 = _interopRequireDefault(_nightingale);
11
12var _exec = require('../utils/exec');
13
14var _availableDisplays = require('../utils/availableDisplays');
15
16var _availableDisplays2 = _interopRequireDefault(_availableDisplays);
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20const logger = new _nightingale2.default('app:commands:display'); /* eslint-disable no-use-before-define */
21
22
23let currentDisplay;
24let currentUrl;
25let displayProcess;
26let unclutterProcess;
27
28const isBrowser = display => _availableDisplays.webBrowsers.includes(display);
29const supports = exports.supports = (display = currentDisplay) => _availableDisplays2.default.includes(display);
30
31const refresh = exports.refresh = () => {
32 if (displayProcess) {
33 logger.log('refresh');
34 return (0, _exec.runSyncAsUser)(`./${currentDisplay}.sh`, ['refresh']);
35 } else {
36 logger.warn('display stopped');
37 }
38};
39
40const update = exports.update = (config, autoStart = true) => {
41 logger.info('update');
42
43 if (config.display !== currentDisplay) {
44 if (autoStart) stop();
45 currentDisplay = config.display;
46 currentUrl = config.url;
47 if (autoStart) return start();
48 } else if (config.url !== currentUrl) {
49 if (autoStart) stop(true);
50 currentUrl = config.url;
51 if (autoStart) return start();
52 }
53};
54
55const startDisplay = () => {
56 logger.info('starting child');
57 if (displayProcess) {
58 throw new Error('child process already started');
59 }
60
61 logger.info('start', { display: currentDisplay, url: currentUrl });
62 displayProcess = (0, _exec.runAsyncAsUser)(`./${currentDisplay}.sh`, ['start', currentUrl]);
63 const thisDisplayProcess = displayProcess;
64 displayProcess.on('exit', (code, signal) => {
65 const currentDisplayProcess = displayProcess;
66 const sameChildProcess = () => thisDisplayProcess === currentDisplayProcess;
67 displayProcess = null;
68 logger.error('child process exited', { code, signal });
69 if (sameChildProcess()) {
70 process.nextTick(() => {
71 if (sameChildProcess()) start();
72 });
73 }
74 });
75
76 if (!unclutterProcess) {
77 const unclutterIdle = isBrowser(currentDisplay) ? 5 : 0;
78 unclutterProcess = (0, _exec.runAsyncAsUser)('unclutter', ['-display', ':0', '-idle', unclutterIdle]);
79 unclutterProcess.on('exit', (code, signal) => {
80 logger.info('unclutter exited', { code, signal });
81 unclutterProcess = null;
82 });
83 }
84};
85
86const openboxStarted = exports.openboxStarted = () => {
87 logger.success('openbox started');
88 startDisplay();
89};
90
91const start = exports.start = () => {
92 if (displayProcess) {
93 logger.warn('start: already started');
94 return;
95 }
96
97 if (!supports(currentDisplay)) return;
98
99 logger.info('starting...', { display: currentDisplay });
100
101 // } else if (startOpenBox() !== 'started') {
102 // logger.info('openbox not yet started');
103 // } else {
104 startDisplay();
105 // }
106};
107
108const restart = exports.restart = () => {
109 logger.info('restarting...');
110 stop(true);
111 return start();
112};
113
114const kill = process => {
115 process.removeAllListeners();
116 process.kill();
117 return null;
118};
119
120const stop = exports.stop = (onlyDisplay = false) => {
121 logger.info('stop', { display: currentDisplay });
122
123 if (displayProcess) displayProcess = kill(displayProcess);
124 if (!onlyDisplay && unclutterProcess) unclutterProcess = kill(unclutterProcess);
125
126 (0, _exec.runSyncAsUser)('./display.sh', ['stop']);
127
128 if (currentDisplay === 'omxplayer') {
129 (0, _exec.runSyncAsUser)('./display.sh', ['restart']);
130 (0, _exec.runSyncAsUser)('./screen.sh', ['waitForX']);
131 }
132};
133//# sourceMappingURL=display.js.map
\No newline at end of file