From 16d3fe0b583a3ffd6b18444fa111caf9f3faf94b Mon Sep 17 00:00:00 2001 From: Admin Date: Thu, 24 Sep 2026 01:42:14 +0000 Subject: [PATCH] fix(print): auto-start capture and surface listener state --- src/main.ts | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/main.ts b/src/main.ts index 8755560..f57b0c2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -90,6 +90,7 @@ let bundleType: BundleType | null = null let availableUpdate: Update | null = null let availableManualUpdate: ManualUpdate | null = null let updateBusy = false +let captureError: string | null = null let systemPrinters: SystemPrinter[] = [] let virtualPrinterStatus: VirtualPrinterStatus | null = null @@ -286,12 +287,22 @@ async function refreshPrinters() { function render() { const pill = el('status-pill') - pill.classList.toggle('live', status?.running ?? false) - pill.querySelector('span:last-child')!.textContent = status?.running ? `Capturing · ${status.mode}` : 'Stopped' + pill.classList.toggle('live', (status?.running ?? false) && !captureError) + pill.querySelector('span:last-child')!.textContent = captureError + ? 'Capture error' + : status?.running + ? `Capturing · ${status.mode}` + : 'Stopped' el('job-count').textContent = String(status?.jobs ?? jobs.length) el('code-count').textContent = String(jobs.reduce((sum, job) => sum + job.barcodes.length, 0)) el('pending-count').textContent = String(status?.pending ?? 0) - el('job-hint').textContent = jobs.length ? `${jobs.length} retained locally` : 'Waiting for capture' + el('job-hint').textContent = captureError + ? `Capture unavailable: ${captureError}` + : jobs.length + ? `${jobs.length} retained locally` + : status?.running + ? 'Ready for print jobs' + : 'Capture stopped' el('jobs').innerHTML = jobs.length ? jobs.map((job) => `
@@ -313,6 +324,22 @@ async function refreshStatus() { render() } +async function ensureCaptureStarted() { + try { + await invoke('start_capture') + captureError = null + } catch (error) { + captureError = String(error) + } + await refreshStatus() + return !captureError +} + +async function restartCapture() { + await invoke('stop_capture').catch(() => undefined) + return ensureCaptureStarted() +} + el('forwardPrinter').addEventListener('change', () => { const selected = systemPrinters.find((printer) => printer.name === el('forwardPrinter').value) if (selected?.address) { @@ -339,6 +366,7 @@ el('install-printer').addEventListener('click', async () => { try { virtualPrinterStatus = await invoke('install_virtual_printer', { targetPrinter }) config = await invoke('save_config', { config: readForm() }) + await restartCapture() await refreshPrinters() } catch (error) { state.textContent = `Printer setup failed: ${String(error)}` @@ -365,16 +393,17 @@ el('remove-printer').addEventListener('click', async () => { el('save').addEventListener('click', async () => { config = await invoke('save_config', { config: readForm() }) writeForm(config) - await refreshStatus() + if (status?.running) await restartCapture() + else await refreshStatus() }) el('start').addEventListener('click', async () => { config = await invoke('save_config', { config: readForm() }) - await invoke('start_capture') - await refreshStatus() + await restartCapture() }) el('stop').addEventListener('click', async () => { + captureError = null await invoke('stop_capture') await refreshStatus() }) @@ -565,7 +594,8 @@ await listen('capture-job', (event) => { config = await invoke('get_config') writeForm(config) -await Promise.all([refreshStatus(), refreshPrinters()]) +await refreshPrinters() +await ensureCaptureStarted() currentVersion = await getVersion() bundleType = await getBundleType().catch(() => null)