Simplify Once (self.active=False, data-value payload); fix Mako connect lockup
Once now just flips self.active off in _loop() instead of the earlier
multi-attempt/return-value bookkeeping — no self.stop() call, since that
would await self._task from inside the task running it. The Once button
passes its payload fragment via data-value, like widget_standard's buttons,
instead of hardcoding it in the click handler.
mako.py: bound the GVSPAdjustPacketSize busy-wait with a timeout. Unbounded,
it could hang forever on a flaky link while holding the connect lock shared
by every Mako camera, locking out teccam2/teccam3 together (the "Mako
connection lockup" that used to need a process restart).
stream.py: offload FITS read + PNG/base64 encoding to a thread so a slow
preview frame can't stall the shared event loop (telemetry, other cameras'
broadcasts, websockets) while encoding.
Co-Authored-By:
Claude Sonnet 5 <noreply@anthropic.com>