()
| 3200 | |
| 3201 | let latestJob = null; |
| 3202 | const tickWithHeartbeat = async () => { |
| 3203 | let hb = null; |
| 3204 | try { |
| 3205 | hb = setInterval(() => { |
| 3206 | if (!latestJob || String(latestJob.state || '').toLowerCase() !== 'running') return; |
| 3207 | renderCryptoJobUi({ |
| 3208 | folder, |
| 3209 | mode, |
| 3210 | job: { ...latestJob, _tickPending: true } |
| 3211 | }); |
| 3212 | }, 350); |
| 3213 | return await tickOnce(); |
| 3214 | } finally { |
| 3215 | if (hb) clearInterval(hb); |
| 3216 | } |
| 3217 | }; |
| 3218 | |
| 3219 | const loop = async () => { |
| 3220 | try { |
no test coverage detected