From 4e52e1ba882c26b09941b52982fd9d597a160a33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Fri, 21 Apr 2023 11:11:57 -0400
Subject: [PATCH] conversation_module: add possibility to bootstrap one
 conversation

Change-Id: I388ceaffe716550c082bd18f07b8cde6d2498ba6
---
 src/jamidht/conversation_module.cpp | 16 +++++++++++++---
 src/jamidht/conversation_module.h   |  2 +-
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index b349fc6e51..9717578ed2 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -1264,10 +1264,9 @@ ConversationModule::loadConversations()
 }
 
 void
-ConversationModule::bootstrap()
+ConversationModule::bootstrap(const std::string& convId)
 {
-    std::unique_lock<std::mutex> lk(pimpl_->conversationsMtx_);
-    for (auto& [_, conv] : pimpl_->conversations_) {
+    auto bootstrap = [&](auto& conv) {
         if (conv) {
 #ifdef LIBJAMI_TESTABLE
             conv->onBootstrapStatus(pimpl_->bootstrapCbTest_);
@@ -1275,6 +1274,17 @@ ConversationModule::bootstrap()
             conv->bootstrap(
                 std::bind(&ConversationModule::Impl::bootstrapCb, pimpl_.get(), conv->id()));
         }
+    };
+    std::unique_lock<std::mutex> lk(pimpl_->conversationsMtx_);
+    if (convId.empty()) {
+        for (auto& [_, conv] : pimpl_->conversations_) {
+            bootstrap(conv);
+        }
+    } else {
+        auto it = pimpl_->conversations_.find(convId);
+        if (it != pimpl_->conversations_.end()) {
+            bootstrap(it->second);
+        }
     }
 }
 void
diff --git a/src/jamidht/conversation_module.h b/src/jamidht/conversation_module.h
index 59d28770c0..dddedb6ac7 100644
--- a/src/jamidht/conversation_module.h
+++ b/src/jamidht/conversation_module.h
@@ -80,7 +80,7 @@ public:
     /**
      * Bootstrap swarm managers to other peers
      */
-    void bootstrap();
+    void bootstrap(const std::string& convId = "");
 
     /**
      * Clear not removed fetch
-- 
GitLab