diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp index ba6c1d7f8215d0d7c103e948424bd1f413873390..37a2159309b95dee1b8e965df230a33665a5f827 100644 --- a/src/jamidht/conversation_module.cpp +++ b/src/jamidht/conversation_module.cpp @@ -2851,20 +2851,20 @@ ConversationModule::removeContact(const std::string& uri, bool banned) pimpl_->withConversation(conversationId, [&](auto& conv) { conv.shutdownConnections(); }); return; // Keep the conversation in banned model but stop connections } - // Remove related conversation + + // Removed contacts should not be linked to any conversation + pimpl_->accountManager_->updateContactConversation(uri, ""); + + // Remove all one-to-one conversations with the removed contact auto isSelf = uri == pimpl_->username_; std::vector<std::string> toRm; - auto updateClient = [&](const auto& convId) { - pimpl_->updateConvForContact(uri, convId, ""); - emitSignal<libjami::ConversationSignal::ConversationRemoved>(pimpl_->accountId_, convId); - }; auto removeConvInfo = [&](const auto& conv, const auto& members) { if ((isSelf && members.size() == 1) || (!isSelf && std::find(members.begin(), members.end(), uri) != members.end())) { // Mark the conversation as removed if it wasn't already if (!conv->info.isRemoved()) { conv->info.removed = std::time(nullptr); - updateClient(conv->info.id); + emitSignal<libjami::ConversationSignal::ConversationRemoved>(pimpl_->accountId_, conv->info.id); pimpl_->addConvInfo(conv->info); return true; } @@ -2892,8 +2892,6 @@ ConversationModule::removeContact(const std::string& uri, bool banned) } } } - // Note, if we ban the device, we don't send the leave cause the other peer will just - // never got the notifications, so just erase the datas for (const auto& id : toRm) pimpl_->removeRepository(id, true, true); }