Improve and condense related controls

This commit is contained in:
2026-02-15 22:11:17 +00:00
parent 02bcb559bc
commit 3d5fb29068
18 changed files with 1340 additions and 209 deletions

View File

@@ -32,6 +32,7 @@ class WhatsAppClient(ClientBase):
self._accounts = []
self._chat_presence = None
self._chat_presence_media = None
self._last_pair_request = 0
self.enabled = bool(
str(getattr(settings, "WHATSAPP_ENABLED", "false")).lower()
@@ -120,8 +121,39 @@ class WhatsAppClient(ClientBase):
# Keep task alive so state/callbacks remain active.
while not self._stopping:
await self._sync_pair_request()
await asyncio.sleep(1)
async def _sync_pair_request(self):
state = transport.get_runtime_state(self.service)
requested_at = int(state.get("pair_requested_at") or 0)
if requested_at <= 0 or requested_at <= self._last_pair_request:
return
self._last_pair_request = requested_at
self._publish_state(
connected=False,
pair_qr="",
warning="Waiting for WhatsApp QR from Neonize.",
)
if self._client is None:
return
try:
if hasattr(self._client, "disconnect"):
await self._maybe_await(self._client.disconnect())
except Exception as exc:
self.log.warning("whatsapp disconnect before pairing failed: %s", exc)
try:
await self._maybe_await(self._client.connect())
except Exception as exc:
self._publish_state(
connected=False,
warning=f"WhatsApp pairing refresh failed: {exc}",
)
self.log.warning("whatsapp pairing refresh failed: %s", exc)
def _register_event(self, event_cls, callback):
if event_cls is None:
return