From 6f3f7707832c8fa3f0d12248b97c3f982e77204d Mon Sep 17 00:00:00 2001 From: boksbc Date: Mon, 11 May 2026 22:08:37 +0200 Subject: [PATCH] fix: wakeword restart-after-kill, stale close event, stdout line buffer --- electron/wakeword.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/electron/wakeword.js b/electron/wakeword.js index 26b40b6..9dbba93 100644 --- a/electron/wakeword.js +++ b/electron/wakeword.js @@ -10,24 +10,30 @@ function startWakeword({ onWake }) { const scriptPath = path.join(__dirname, '../python/wakeword.py'); - wakewordProcess = spawn('python3', [scriptPath], { + const proc = spawn('python3', [scriptPath], { stdio: ['pipe', 'pipe', 'pipe'], }); + wakewordProcess = proc; - wakewordProcess.stdout.on('data', (data) => { - if (data.toString().trim() === 'WAKE') { - onWake(); + let lineBuffer = ''; + proc.stdout.on('data', (data) => { + lineBuffer += data.toString(); + const lines = lineBuffer.split('\n'); + lineBuffer = lines.pop(); + for (const line of lines) { + if (line.trim() === 'WAKE') onWake(); } }); - wakewordProcess.stderr.on('data', (data) => { + proc.stderr.on('data', (data) => { console.error('[Wakeword]', data.toString().trim()); }); - wakewordProcess.on('close', (code) => { + proc.on('close', (code, signal) => { + if (proc !== wakewordProcess) return; running = false; wakewordProcess = null; - if (code !== 0) { + if (code !== 0 && signal === null) { setTimeout(() => startWakeword({ onWake }), 2000); } });