From 6439832824a57bad079bc9b650292d3d7d6e6610 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Wed, 2 Jun 2021 15:24:36 -0400
Subject: [PATCH] smartlist: show all swarm and draw items

Change-Id: Ib3e01a0af51736727b8056ed9eaa8ce9170c2d6c
GitLab: #438
---
 src/contactadapter.cpp                        |  2 +-
 src/conversationlistmodelbase.cpp             |  5 ++---
 src/conversationlistmodelbase.h               |  2 +-
 src/conversationsadapter.cpp                  |  1 -
 .../components/ContactPickerItemDelegate.qml  |  4 ++--
 .../components/SmartListItemDelegate.qml      |  2 +-
 src/messagesadapter.cpp                       | 19 ++++++++++---------
 7 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/src/contactadapter.cpp b/src/contactadapter.cpp
index 354b4745f..2a7169c6d 100644
--- a/src/contactadapter.cpp
+++ b/src/contactadapter.cpp
@@ -93,7 +93,7 @@ ContactAdapter::setSearchFilter(const QString& filter)
         selectableProxyModel_->setPredicate(
             [this, filter](const QModelIndex& index, const QRegExp&) {
                 return (!defaultModerators_.contains(index.data(Role::URI).toString())
-                        && index.data(Role::BestName).toString().contains(filter));
+                        && index.data(Role::Title).toString().contains(filter));
             });
     }
     selectableProxyModel_->setFilterRegExp(
diff --git a/src/conversationlistmodelbase.cpp b/src/conversationlistmodelbase.cpp
index 7a0537409..6921dafbb 100644
--- a/src/conversationlistmodelbase.cpp
+++ b/src/conversationlistmodelbase.cpp
@@ -59,14 +59,13 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
         contactModel = accountInfo.contactModel.get();
         contact = contactModel->getContact(peerUri);
     } catch (...) {
-        return QVariant(false);
     }
 
     // Since we are using image provider right now, image url representation should be unique to
     // be able to use the image cache, account avatar will only be updated once PictureUid changed
     switch (role) {
-    case Role::BestName:
-        return QVariant(contactModel->bestNameForContact(peerUri));
+    case Role::Title:
+        return QVariant(model_->title(item.uid));
     case Role::BestId:
         return QVariant(contactModel->bestIdForContact(peerUri));
     case Role::Presence:
diff --git a/src/conversationlistmodelbase.h b/src/conversationlistmodelbase.h
index 45ef4c912..9a988bbdc 100644
--- a/src/conversationlistmodelbase.h
+++ b/src/conversationlistmodelbase.h
@@ -23,7 +23,7 @@
 
 // TODO: many of these roles should probably be factored out
 #define CONV_ROLES \
-    X(BestName) \
+    X(Title) \
     X(BestId) \
     X(Presence) \
     X(Alias) \
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index 7967b63ac..8bda692be 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -384,7 +384,6 @@ ConversationsAdapter::getConvInfoMap(const QString& convId)
         contactModel = accountInfo.contactModel.get();
         contact = contactModel->getContact(peerUri);
     } catch (...) {
-        return {};
     }
     bool isAudioOnly {false};
     if (!convInfo.uid.isEmpty()) {
diff --git a/src/mainview/components/ContactPickerItemDelegate.qml b/src/mainview/components/ContactPickerItemDelegate.qml
index e92d6ae56..0714f7f48 100644
--- a/src/mainview/components/ContactPickerItemDelegate.qml
+++ b/src/mainview/components/ContactPickerItemDelegate.qml
@@ -68,7 +68,7 @@ ItemDelegate {
                 font: contactPickerContactName.font
                 elide: Text.ElideMiddle
                 elideWidth: contactPickerContactInfoRect.width
-                text: BestName
+                text: Title
             }
 
             color: JamiTheme.textColor
@@ -90,7 +90,7 @@ ItemDelegate {
                 font: contactPickerContactId.font
                 elide: Text.ElideMiddle
                 elideWidth: contactPickerContactInfoRect.width
-                text: BestId == BestName ? "" : BestId
+                text: BestId == Title ? "" : BestId
             }
 
             text: textMetricsContactPickerContactId.elidedText
diff --git a/src/mainview/components/SmartListItemDelegate.qml b/src/mainview/components/SmartListItemDelegate.qml
index 263d9981d..28ac45cb8 100644
--- a/src/mainview/components/SmartListItemDelegate.qml
+++ b/src/mainview/components/SmartListItemDelegate.qml
@@ -83,7 +83,7 @@ ItemDelegate {
                 Layout.preferredHeight: 20
                 Layout.alignment: Qt.AlignVCenter
                 elide: Text.ElideRight
-                text: BestName === undefined ? "" : BestName
+                text: Title === undefined ? "" : Title
                 font.pointSize: JamiTheme.smartlistItemFontSize
                 font.weight: UnreadMessagesCount ? Font.Bold : Font.Normal
                 color: JamiTheme.textColor
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index f36293b5b..0a9dc2158 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -90,7 +90,7 @@ MessagesAdapter::setupChatView(const QString& convUid)
 
     QMetaObject::invokeMethod(qmlObj_,
                               "setSendContactRequestButtonVisible",
-                              Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
+                              Q_ARG(QVariant, convInfo.isNotASwarm() && convInfo.isRequest));
     QMetaObject::invokeMethod(qmlObj_,
                               "setMessagingHeaderButtonsVisible",
                               Q_ARG(QVariant,
@@ -510,13 +510,7 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
         return;
     }
     try {
-        auto& contact = accInfo->contactModel->getContact(contactUri);
-        auto bestName = accInfo->contactModel->bestNameForContact(contactUri);
-        bool isPending = contact.profileInfo.type == profile::Type::TEMPORARY;
-
-        QMetaObject::invokeMethod(qmlObj_,
-                                  "setSendContactRequestButtonVisible",
-                                  Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
+        auto title = accInfo->conversationModel->title(convInfo.uid);
         QMetaObject::invokeMethod(qmlObj_,
                                   "setMessagingHeaderButtonsVisible",
                                   Q_ARG(QVariant,
@@ -524,10 +518,17 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
                                           && (convInfo.isRequest || convInfo.needsSyncing))));
 
         setInvitation(convInfo.isRequest or convInfo.needsSyncing,
-                      bestName,
+                      title,
                       contactUri,
                       !convInfo.isNotASwarm(),
                       convInfo.needsSyncing);
+        if (!convInfo.isNotASwarm())
+            return;
+        auto& contact = accInfo->contactModel->getContact(contactUri);
+        bool isPending = contact.profileInfo.type == profile::Type::TEMPORARY;
+        QMetaObject::invokeMethod(qmlObj_,
+                                  "setSendContactRequestButtonVisible",
+                                  Q_ARG(QVariant, isPending));
         if (!contact.profileInfo.avatar.isEmpty()) {
             setSenderImage(contactUri, contact.profileInfo.avatar);
         } else {
-- 
GitLab