From c47cfe446d7e13877215d7de48ba7e1b1b8a1a41 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Tue, 6 Jun 2023 16:54:20 -0400 Subject: [PATCH] notifications: gnu/linux: do a lookup for incoming trust requests Attempt a name directory lookup for trust requests before popping a notification. Fall back to the display name, then peer URI if needed. Gitlab: #1141 Change-Id: Ie91c3fdf518cb8f27d8f0d6a74f015e9c4034d42 --- src/app/conversationsadapter.cpp | 45 +++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/app/conversationsadapter.cpp b/src/app/conversationsadapter.cpp index 0c20cafc7..cae7f094d 100644 --- a/src/app/conversationsadapter.cpp +++ b/src/app/conversationsadapter.cpp @@ -22,6 +22,9 @@ #include "qtutils.h" #include "systemtray.h" #include "qmlregister.h" +#include "qtutils.h" + +#include "namedirectory.h" #include <QApplication> #include <QJsonObject> @@ -232,21 +235,37 @@ ConversationsAdapter::onNewTrustRequest(const QString& accountId, if (convInfo.uid.isEmpty()) return; } - auto& accInfo = lrcInstance_->getAccountInfo(accountId); - auto from = accInfo.contactModel->bestNameForContact(peerUri); auto to = lrcInstance_->accountModel().bestNameForAccount(accountId); - auto preferences = accInfo.conversationModel->getConversationPreferences(convId); - // Ignore notifications for this conversation - if (preferences["ignoreNotifications"] == "true") - return; - auto contactPhoto = Utils::contactPhoto(lrcInstance_, peerUri, QSize(50, 50), accountId); - auto notifId = QString("%1;%2").arg(accountId, conv); - systemTray_->showNotification(notifId, - tr("%1 received a new trust request").arg(to), - "New request from " + from, - SystemTray::NotificationType::REQUEST, - Utils::QImageToByteArray(contactPhoto)); + auto cb = [this, to, accountId, conv, peerUri](QString peerBestName) { + auto contactPhoto = Utils::contactPhoto(lrcInstance_, peerUri, QSize(50, 50), accountId); + auto notifId = QString("%1;%2").arg(accountId, conv); + systemTray_->showNotification(notifId, + tr("%1 received a new trust request").arg(to), + "New request from " + peerBestName, + SystemTray::NotificationType::REQUEST, + Utils::QImageToByteArray(contactPhoto)); + }; + + // This peer is not yet a contact, so we don't have a name for it, + // but we can attempt to look it up using the name service before + // falling back to the bestNameForContact. + Utils::oneShotConnect(&NameDirectory::instance(), + &NameDirectory::registeredNameFound, + this, + [this, accountId, peerUri, cb](NameDirectory::LookupStatus status, + const QString& address, + const QString& name) { + if (address == peerUri) { + if (status == NameDirectory::LookupStatus::SUCCESS) + cb(name); + else { + auto& accInfo = lrcInstance_->getAccountInfo(accountId); + cb(accInfo.contactModel->bestNameForContact(peerUri)); + } + } + }); + std::ignore = NameDirectory::instance().lookupAddress(accountId, peerUri); } #else Q_UNUSED(accountId) -- GitLab