From 8e7e39c1e9dab2af6638462ed44a36605982fcfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Fri, 21 Oct 2022 16:38:58 -0400 Subject: [PATCH] sip: search conversation filter The URI we search can be the id of another conversation, causing another contact to be shown. Change-Id: Icdbc01b5466559fd6c9f77dde57338903e54ea99 --- src/app/currentconversation.cpp | 3 ++- src/libclient/conversationmodel.cpp | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/app/currentconversation.cpp b/src/app/currentconversation.cpp index 5852570e0..e2cbc264d 100644 --- a/src/app/currentconversation.cpp +++ b/src/app/currentconversation.cpp @@ -80,7 +80,8 @@ CurrentConversation::updateData() // is consistently determined by the peer's uri being equal to // the conversation id. auto members = accInfo.conversationModel->peersForConversation(convId); - set_isTemporary(isCoreDialog_ ? convId == members.at(0) : false); + set_isTemporary(isCoreDialog_ ? (convId == members.at(0) || convId == "SEARCHSIP") + : false); auto isContact {false}; if (isCoreDialog_) diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp index e897830df..c6e136e63 100644 --- a/src/libclient/conversationmodel.cpp +++ b/src/libclient/conversationmodel.cpp @@ -885,7 +885,7 @@ ConversationModelPimpl::placeCall(const QString& uid, bool isAudioOnly) auto convId = uid; auto participant = peers.front(); - bool isTemporary = participant == convId; + bool isTemporary = convId == participant || convId == "SEARCHSIP"; auto contactInfo = linked.owner.contactModel->getContact(participant); auto uri = contactInfo.profileInfo.uri; @@ -928,7 +928,7 @@ ConversationModelPimpl::placeCall(const QString& uid, bool isAudioOnly) &ConversationModel::conversationReady, [cb, connection, convId](QString conversationId, QString participantId) { - if (participantId != convId) { + if (participantId != convId && convId != "SEARCHSIP") { return; } cb(conversationId); @@ -1167,7 +1167,7 @@ ConversationModel::sendMessage(const QString& uid, const QString& body, const QS } auto convId = uid; auto& peerId = peers.front(); - bool isTemporary = peerId == convId; + bool isTemporary = peerId == convId || convId == "SEARCHSIP"; auto cb = ([this, isTemporary, body, &conversation, parentId, convId]( QString conversationId) { @@ -1252,7 +1252,7 @@ ConversationModel::sendMessage(const QString& uid, const QString& body, const QS &ConversationModel::conversationReady, [cb, connection, convId](QString conversationId, QString participantId) { - if (participantId != convId) { + if (participantId != convId && convId != "SEARCHSIP") { return; } cb(conversationId); @@ -2969,7 +2969,12 @@ ConversationModelPimpl::slotContactModelUpdated(const QString& uri) auto users = linked.owner.contactModel->getSearchResults(); for (auto& user : users) { conversation::Info conversationInfo; - conversationInfo.uid = user.profileInfo.uri; + // For SIP, we always got one search result, so "" is ok as there is no empty uri + // For Jami accounts, the nameserver can return several results, so we use the uniqueness of + // the id as id for a temporary conversation. + conversationInfo.uid = linked.owner.profileInfo.type == profile::Type::SIP + ? "SEARCHSIP" + : user.profileInfo.uri; conversationInfo.participants.append( member::Member {user.profileInfo.uri, member::Role::MEMBER}); conversationInfo.accountId = linked.owner.id; @@ -3708,7 +3713,7 @@ ConversationModel::sendFile(const QString& convUid, const QString& path, const Q conversationReady callback could be updated to ONE_TO_ONE. We still use conversationReady callback for one_to_one conversation to check if contact is blocked*/ const auto peerId = peers.front(); - bool isTemporary = peerId == convUid; + bool isTemporary = peerId == convUid || convUid == "SEARCHSIP"; /* It is necessary to make a copy of convUid since it may very well point to a field in the temporary conversation, which is going to be destroyed by -- GitLab