diff --git a/src/jamidht/account_manager.cpp b/src/jamidht/account_manager.cpp index b4adc0d512b34110de7cfb377a7deb8661e5d043..c6f3ff7659b08d95b1328848477049aeeaea89e3 100644 --- a/src/jamidht/account_manager.cpp +++ b/src/jamidht/account_manager.cpp @@ -522,6 +522,28 @@ AccountManager::removeContactConversation(const std::string& uri) syncDevices(); } +void +AccountManager::updateContactConversation(const std::string& uri, const std::string& convId) +{ + dht::InfoHash h(uri); + if (not h) { + JAMI_ERR("removeContact: invalid contact URI"); + return; + } + if (not info_) { + JAMI_ERR("addContact(): account not loaded"); + return; + } + info_->contacts->updateConversation(h, convId); + // Also decline trust request if there is one + auto req = info_->contacts->getTrustRequest(h); + if (req.find(libjami::Account::TrustRequest::CONVERSATIONID) != req.end() + && req.at(libjami::Account::TrustRequest::CONVERSATIONID) == convId) { + discardTrustRequest(uri); + } + syncDevices(); +} + std::vector<std::map<std::string, std::string>> AccountManager::getContacts() const { diff --git a/src/jamidht/account_manager.h b/src/jamidht/account_manager.h index dfe97618e45993f5eb187af665a0aee7428250da..4e1250ac3f1feb8fb05de54b80fe13ab04355bd9 100644 --- a/src/jamidht/account_manager.h +++ b/src/jamidht/account_manager.h @@ -220,6 +220,7 @@ public: const std::string& conversationId = ""); void removeContact(const std::string& uri, bool banned = true); void removeContactConversation(const std::string& uri); // for non swarm contacts + void updateContactConversation(const std::string& uri, const std::string& convId); std::vector<std::map<std::string, std::string>> getContacts() const; /** Obtain details about one account contact in serializable form. */ diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp index 7228a311fc7a3e7210ca0766a52a9386a5c22dc8..6f6eb411eaf232500009e41aad2c39a4394b4943 100644 --- a/src/jamidht/jamiaccount.cpp +++ b/src/jamidht/jamiaccount.cpp @@ -2826,19 +2826,13 @@ JamiAccount::updateConvForContact(const std::string& uri, if (newConv != oldConv) { std::lock_guard<std::recursive_mutex> lock(configurationMutex_); if (auto info = accountManager_->getInfo()) { - auto urih = dht::InfoHash(uri); auto details = getContactDetails(uri); auto itDetails = details.find(libjami::Account::TrustRequest::CONVERSATIONID); if (itDetails != details.end() && itDetails->second != oldConv) { JAMI_DEBUG("Old conversation is not found in details {} - found: {}", oldConv, itDetails->second); return false; } - info->contacts->updateConversation(urih, newConv); - // Also decline trust request if there is one - auto req = info->contacts->getTrustRequest(urih); - if (req.find(libjami::Account::TrustRequest::CONVERSATIONID) != req.end() - && req.at(libjami::Account::TrustRequest::CONVERSATIONID) == oldConv) - accountManager_->discardTrustRequest(uri); + accountManager_->updateContactConversation(uri, newConv); } return true; }