1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.stop = exports.restart = exports.start = exports.openboxStarted = exports.update = exports.refresh = exports.supports = undefined;
|
7 |
|
8 | var _nightingale = require('nightingale');
|
9 |
|
10 | var _nightingale2 = _interopRequireDefault(_nightingale);
|
11 |
|
12 | var _exec = require('../utils/exec');
|
13 |
|
14 | var _availableDisplays = require('../utils/availableDisplays');
|
15 |
|
16 | var _availableDisplays2 = _interopRequireDefault(_availableDisplays);
|
17 |
|
18 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19 |
|
20 | const logger = new _nightingale2.default('app:commands:display');
|
21 |
|
22 |
|
23 | let currentDisplay;
|
24 | let currentUrl;
|
25 | let displayProcess;
|
26 | let unclutterProcess;
|
27 |
|
28 | const isBrowser = display => _availableDisplays.webBrowsers.includes(display);
|
29 | const supports = exports.supports = (display = currentDisplay) => _availableDisplays2.default.includes(display);
|
30 |
|
31 | const 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 |
|
40 | const 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 |
|
55 | const 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 |
|
86 | const openboxStarted = exports.openboxStarted = () => {
|
87 | logger.success('openbox started');
|
88 | startDisplay();
|
89 | };
|
90 |
|
91 | const 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 |
|
102 |
|
103 |
|
104 | startDisplay();
|
105 |
|
106 | };
|
107 |
|
108 | const restart = exports.restart = () => {
|
109 | logger.info('restarting...');
|
110 | stop(true);
|
111 | return start();
|
112 | };
|
113 |
|
114 | const kill = process => {
|
115 | process.removeAllListeners();
|
116 | process.kill();
|
117 | return null;
|
118 | };
|
119 |
|
120 | const 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 |
|
\ | No newline at end of file |