From 771e8bcb9d8a927ad4f7ce1c576ce540c115c881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 4 May 2023 15:23:49 -0400 Subject: [PATCH] conversationmodel: use mode before conversation deletion Change-Id: Ibf6fffae59475ce415a60ab1bbf09687d6d30c29 --- src/libclient/contactmodel.cpp | 38 ++++++++++++++--------------- src/libclient/conversationmodel.cpp | 5 ++-- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/libclient/contactmodel.cpp b/src/libclient/contactmodel.cpp index b43c407b2..01e6b8765 100644 --- a/src/libclient/contactmodel.cpp +++ b/src/libclient/contactmodel.cpp @@ -418,9 +418,9 @@ ContactModel::searchContact(const QString& query) pimpl_->searchResult.clear(); auto uri = URI(query); - QString uriID = uri.format(URI::Section::USER_INFO | URI::Section::HOSTNAME + QString uriId = uri.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT); - pimpl_->searchQuery = uriID; + pimpl_->searchQuery = uriId; auto uriScheme = uri.schemeType(); if (static_cast<int>(uriScheme) > 2 && owner.profileInfo.type == profile::Type::SIP) { @@ -452,11 +452,11 @@ ContactModelPimpl::updateTemporaryMessage(const QString& mes) void ContactModelPimpl::searchContact(const URI& query) { - QString uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME + QString uriId = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT); if (query.isEmpty()) { // This will remove the temporary item - Q_EMIT linked.modelUpdated(uriID); + Q_EMIT linked.modelUpdated(uriId); updateTemporaryMessage(""); return; } @@ -464,51 +464,49 @@ ContactModelPimpl::searchContact(const URI& query) if (query.protocolHint() == URI::ProtocolHint::RING) { updateTemporaryMessage(""); // no lookup, this is a ring infoHash - for (auto& i : contacts) { - if (i.profileInfo.uri == uriID) { + for (auto& i : contacts) + if (i.profileInfo.uri == uriId) return; - } - } - auto& temporaryContact = searchResult[uriID]; - temporaryContact.profileInfo.uri = uriID; - temporaryContact.profileInfo.alias = uriID; + auto& temporaryContact = searchResult[uriId]; + temporaryContact.profileInfo.uri = uriId; + temporaryContact.profileInfo.alias = uriId; temporaryContact.profileInfo.type = profile::Type::TEMPORARY; - Q_EMIT linked.modelUpdated(uriID); + Q_EMIT linked.modelUpdated(uriId); } else { updateTemporaryMessage(tr("Searching…")); // If the username contains an @ it's an exact match bool isJamsAccount = !linked.owner.confProperties.managerUri.isEmpty(); if (isJamsAccount and not query.hasHostname()) - ConfigurationManager::instance().searchUser(linked.owner.id, uriID); + ConfigurationManager::instance().searchUser(linked.owner.id, uriId); else - ConfigurationManager::instance().lookupName(linked.owner.id, "", uriID); + ConfigurationManager::instance().lookupName(linked.owner.id, "", uriId); } } void ContactModelPimpl::searchSipContact(const URI& query) { - QString uriID = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME + QString uriId = query.format(URI::Section::USER_INFO | URI::Section::HOSTNAME | URI::Section::PORT); if (query.isEmpty()) { // This will remove the temporary item - Q_EMIT linked.modelUpdated(uriID); + Q_EMIT linked.modelUpdated(uriId); updateTemporaryMessage(""); return; } { std::lock_guard<std::mutex> lk(contactsMtx_); - if (contacts.find(uriID) == contacts.end()) { + if (contacts.find(uriId) == contacts.end()) { auto& temporaryContact = searchResult[query]; - temporaryContact.profileInfo.uri = uriID; - temporaryContact.profileInfo.alias = uriID; + temporaryContact.profileInfo.uri = uriId; + temporaryContact.profileInfo.alias = uriId; temporaryContact.profileInfo.type = profile::Type::TEMPORARY; } } - Q_EMIT linked.modelUpdated(uriID); + Q_EMIT linked.modelUpdated(uriId); } uint64_t diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp index 30c16fabe..34c588c14 100644 --- a/src/libclient/conversationmodel.cpp +++ b/src/libclient/conversationmodel.cpp @@ -831,7 +831,7 @@ ConversationModel::removeConversation(const QString& uid, bool banned) "participant"; return; } - if (conversation.isSwarm() && !banned) { + if (conversation.isSwarm() && !banned && !conversation.isCoreDialog()) { if (conversation.isRequest) ConfigurationManager::instance().declineConversationRequest(owner.id, uid); else @@ -2824,6 +2824,7 @@ ConversationModelPimpl::slotConversationRemoved(const QString& accountId, return; } auto contactUri = peers.first(); + auto mode = conversation.mode; contact::Info contact; try { contact = linked.owner.contactModel->getContact(contactUri); @@ -2832,7 +2833,7 @@ ConversationModelPimpl::slotConversationRemoved(const QString& accountId, removeConversation(); - if (conversation.mode == conversation::Mode::ONE_TO_ONE) { + if (mode == conversation::Mode::ONE_TO_ONE) { // If it's a 1:1 conversation and we don't have any more conversation // we can remove the contact auto contactRemoved = true; -- GitLab