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