Improve and condense related controls

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

View File

@@ -1,4 +1,5 @@
from django.shortcuts import render
from django.urls import reverse
from django.views import View
from mixins.views import ObjectList, ObjectRead
@@ -68,13 +69,40 @@ class WhatsAppAccountAdd(SuperUserRequiredMixin, ObjectRead):
detail_url_name = "whatsapp_account_add"
detail_url_args = ["type", "device"]
def _device_name(self) -> str:
form_args = self.request.POST.dict()
return form_args.get("device", "GIA Device")
def _refresh_only(self) -> bool:
form_args = self.request.POST.dict()
return str(form_args.get("refresh") or "") == "1"
def _detail_context(self, kwargs, obj):
detail_url_args = {
arg: kwargs[arg]
for arg in self.detail_url_args
if arg in kwargs
}
return {
"object": obj,
"detail_url": reverse(self.detail_url_name, kwargs=detail_url_args),
}
def post(self, request, *args, **kwargs):
self.request = request
if self._refresh_only() and request.htmx:
obj = self.get_object(**kwargs)
return render(
request,
self.detail_template,
self._detail_context(kwargs, obj),
)
return super().get(request, *args, **kwargs)
def get_object(self, **kwargs):
form_args = self.request.POST.dict()
device_name = form_args.get("device", "GIA Device")
device_name = self._device_name()
if not self._refresh_only():
transport.request_pairing(self.service, device_name)
try:
image_bytes = transport.get_link_qr(self.service, device_name)
return {
@@ -83,8 +111,11 @@ class WhatsAppAccountAdd(SuperUserRequiredMixin, ObjectRead):
"warning": transport.get_service_warning(self.service),
}
except Exception as exc:
error_text = str(exc)
return {
"ok": False,
"error": str(exc),
"pending": "pairing qr" in error_text.lower(),
"device": device_name,
"error": error_text,
"warning": transport.get_service_warning(self.service),
}