From fb853b81057b0be379622272ffef675da064f636 Mon Sep 17 00:00:00 2001
From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
Date: Mon, 3 May 2021 17:52:13 -0400
Subject: [PATCH] convmodel: notify when a lookup is completed for a contact

Change-Id: I74323264ea05d88d07e4cdc9f57b2d45650c21c2
---
 src/api/contactmodel.h    |  2 +-
 src/contactmodel.cpp      | 40 +++++++++++++++++++--------------------
 src/conversationmodel.cpp | 22 +++++++++------------
 3 files changed, 29 insertions(+), 35 deletions(-)

diff --git a/src/api/contactmodel.h b/src/api/contactmodel.h
index 9bceef89..9ce1042b 100644
--- a/src/api/contactmodel.h
+++ b/src/api/contactmodel.h
@@ -125,7 +125,7 @@ Q_SIGNALS:
     /**
      * Connect this signal to know when this model was updated.
      */
-    void modelUpdated(const QString& uri, bool needsSorted = true) const;
+    void modelUpdated(const QString& uri) const;
     /**
      * Connect this signal to know when a contact was added.
      * @param contactUri
diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp
index b08ab576..186373a6 100644
--- a/src/contactmodel.cpp
+++ b/src/contactmodel.cpp
@@ -737,7 +737,7 @@ ContactModelPimpl::fillWithJamiContacts()
                     auto it = contacts.find(uri);
                     if (it != contacts.end()) {
                         it->isPresent = key == "Online";
-                        linked.modelUpdated(uri, false);
+                        linked.modelUpdated(uri);
                     }
                 }
                 break;
@@ -762,7 +762,7 @@ ContactModelPimpl::slotNewBuddySubscription(const QString& accountId,
         } else
             return;
     }
-    emit linked.modelUpdated(contactUri, false);
+    emit linked.modelUpdated(contactUri);
 }
 
 void
@@ -1200,29 +1200,27 @@ ContactModelPimpl::slotUserSearchEnded(const QString& accountId,
     searchResult.clear();
     switch (status) {
     case 0: /* SUCCESS */
+        for (auto& resultInfo : result) {
+            if (contacts.find(resultInfo.value("id")) != contacts.end()) {
+                continue;
+            }
+            profile::Info profileInfo;
+            profileInfo.uri = resultInfo.value("id");
+            profileInfo.type = profile::Type::TEMPORARY;
+            profileInfo.avatar = resultInfo.value("profilePicture");
+            profileInfo.alias = resultInfo.value("firstName") + " " + resultInfo.value("lastName");
+            contact::Info contactInfo;
+            contactInfo.profileInfo = profileInfo;
+            contactInfo.registeredName = resultInfo.value("username");
+            searchResult.insert(profileInfo.uri, contactInfo);
+        }
+        updateTemporaryMessage("");
         break;
     case 3: /* ERROR */
         updateTemporaryMessage("could not find contact matching search");
-        emit linked.modelUpdated(query);
-        return;
+        break;
     default:
-        emit linked.modelUpdated(query);
-        return;
-    }
-    updateTemporaryMessage("");
-    for (auto& resultInfo : result) {
-        if (contacts.find(resultInfo.value("id")) != contacts.end()) {
-            continue;
-        }
-        profile::Info profileInfo;
-        profileInfo.uri = resultInfo.value("id");
-        profileInfo.type = profile::Type::TEMPORARY;
-        profileInfo.avatar = resultInfo.value("profilePicture");
-        profileInfo.alias = resultInfo.value("firstName") + " " + resultInfo.value("lastName");
-        contact::Info contactInfo;
-        contactInfo.profileInfo = profileInfo;
-        contactInfo.registeredName = resultInfo.value("username");
-        searchResult.insert(profileInfo.uri, contactInfo);
+        break;
     }
     emit linked.modelUpdated(query);
 }
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index be31a18f..1dc70f61 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -225,7 +225,7 @@ public Q_SLOTS:
     /**
      * Listen from contactModel when updated (like new alias, avatar, etc.)
      */
-    void slotContactModelUpdated(const QString& uri, bool needsSorted);
+    void slotContactModelUpdated(const QString& uri);
     /**
      * Listen from contactModel when a new contact is added
      * @param uri
@@ -1770,19 +1770,15 @@ ConversationModelPimpl::slotContactRemoved(const QString& uri)
 }
 
 void
-ConversationModelPimpl::slotContactModelUpdated(const QString& uri, bool needsSorted)
+ConversationModelPimpl::slotContactModelUpdated(const QString& uri)
 {
-    // presence updated
-    if (!needsSorted) {
-        try {
-            auto& conversation = getConversationForPeerUri(uri, true).get();
-            invalidateModel();
-            emit linked.conversationUpdated(conversation.uid);
-            Q_EMIT linked.dataChanged(indexOf(conversation.uid));
-        } catch (std::out_of_range&) {
-            qDebug() << "contact updated for not existing conversation";
-        }
-        return;
+    try {
+        auto& conversation = getConversationForPeerUri(uri, true).get();
+        invalidateModel();
+        emit linked.conversationUpdated(conversation.uid);
+        Q_EMIT linked.dataChanged(indexOf(conversation.uid));
+    } catch (std::out_of_range&) {
+        qDebug() << "contact update attempted for inexistent conversation";
     }
 
     if (currentFilter.isEmpty()) {
-- 
GitLab