Fix Signal messages and replies
This commit is contained in:
@@ -3,6 +3,8 @@ from urllib.parse import urlencode
|
||||
import orjson
|
||||
import requests
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse
|
||||
from django.views import View
|
||||
@@ -68,6 +70,11 @@ class SignalAccounts(SuperUserRequiredMixin, ObjectList):
|
||||
"service": service,
|
||||
"service_label": label,
|
||||
"account_add_url_name": add_url_name,
|
||||
"account_add_type": "modal",
|
||||
"account_add_target": "#modals-here",
|
||||
"account_add_swap": "innerHTML",
|
||||
"account_unlink_url_name": "signal_account_unlink",
|
||||
"account_unlink_label": "Relink",
|
||||
"show_contact_actions": show_contact_actions,
|
||||
"contacts_url_name": f"{service}_contacts",
|
||||
"chats_url_name": f"{service}_chats",
|
||||
@@ -89,6 +96,69 @@ class SignalAccounts(SuperUserRequiredMixin, ObjectList):
|
||||
return self._normalize_accounts(transport.list_accounts("signal"))
|
||||
|
||||
|
||||
class SignalAccountUnlink(SuperUserRequiredMixin, View):
|
||||
def post(self, request, *args, **kwargs):
|
||||
return self.delete(request, *args, **kwargs)
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
account = str(kwargs.get("account") or "").strip()
|
||||
if account:
|
||||
ok = transport.unlink_account("signal", account)
|
||||
if ok:
|
||||
messages.success(
|
||||
request,
|
||||
(
|
||||
"Signal account unlinked. Next step: enter a device name under "
|
||||
"'Add account', submit, then scan the new QR code."
|
||||
),
|
||||
)
|
||||
else:
|
||||
messages.error(
|
||||
request,
|
||||
"Signal relink failed to clear current device state. Try relink again.",
|
||||
)
|
||||
else:
|
||||
messages.warning(request, "No Signal account selected to relink.")
|
||||
|
||||
rows = []
|
||||
for item in transport.list_accounts("signal"):
|
||||
if isinstance(item, dict):
|
||||
value = (
|
||||
item.get("number")
|
||||
or item.get("id")
|
||||
or item.get("jid")
|
||||
or item.get("account")
|
||||
)
|
||||
if value:
|
||||
rows.append(str(value))
|
||||
elif item:
|
||||
rows.append(str(item))
|
||||
|
||||
context = {
|
||||
"service": "signal",
|
||||
"service_label": "Signal",
|
||||
"account_add_url_name": "signal_account_add",
|
||||
"account_add_type": "modal",
|
||||
"account_add_target": "#modals-here",
|
||||
"account_add_swap": "innerHTML",
|
||||
"account_unlink_url_name": "signal_account_unlink",
|
||||
"account_unlink_label": "Relink",
|
||||
"show_contact_actions": True,
|
||||
"contacts_url_name": "signal_contacts",
|
||||
"chats_url_name": "signal_chats",
|
||||
"endpoint_base": str(
|
||||
getattr(settings, "SIGNAL_HTTP_URL", "http://signal:8080")
|
||||
).rstrip("/"),
|
||||
"service_warning": transport.get_service_warning("signal"),
|
||||
"object_list": rows,
|
||||
"list_url": reverse("signal_accounts", kwargs={"type": kwargs["type"]}),
|
||||
"type": kwargs["type"],
|
||||
"context_object_name_singular": "Signal Account",
|
||||
"context_object_name": "Signal Accounts",
|
||||
}
|
||||
return render(request, "partials/signal-accounts.html", context)
|
||||
|
||||
|
||||
class SignalContactsList(SuperUserRequiredMixin, ObjectList):
|
||||
list_template = "partials/signal-contacts-list.html"
|
||||
|
||||
@@ -141,7 +211,13 @@ class SignalChatsList(SuperUserRequiredMixin, ObjectList):
|
||||
|
||||
def get_queryset(self, *args, **kwargs):
|
||||
pk = self.kwargs.get("pk", "")
|
||||
chats = list(Chat.objects.filter(account=pk))
|
||||
chats = list(
|
||||
Chat.objects.filter(
|
||||
Q(account=pk) | Q(account__isnull=True) | Q(account="")
|
||||
).order_by("-id")[:1000]
|
||||
)
|
||||
if not chats:
|
||||
chats = list(Chat.objects.all().order_by("-id")[:1000])
|
||||
rows = []
|
||||
for chat in chats:
|
||||
identifier_candidates = [
|
||||
|
||||
Reference in New Issue
Block a user