Improve and condense related controls
This commit is contained in:
@@ -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),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user