diff --git a/CMakeLists.txt b/CMakeLists.txt
index d980f5856..bdf4f190c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.16)
project(jami-core
- VERSION 14.0.0
+ VERSION 15.1.0
LANGUAGES C CXX)
set(PACKAGE_NAME "Jami Daemon")
set (CMAKE_CXX_STANDARD 17)
diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
index 44b10fab9..99736caa0 100644
--- a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
+++ b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
@@ -1884,6 +1884,18 @@
+
+
+
+ Load messages from a conversation
+
+
+
+
+
+
+
+
diff --git a/bin/dbus/dbusconfigurationmanager.hpp b/bin/dbus/dbusconfigurationmanager.hpp
index ac32f1d84..bf2fd5549 100644
--- a/bin/dbus/dbusconfigurationmanager.hpp
+++ b/bin/dbus/dbusconfigurationmanager.hpp
@@ -953,6 +953,15 @@ public:
return libjami::loadConversationUntil(accountId, conversationId, fromMessage, to);
}
+ uint32_t
+ loadSwarmUntil(const std::string& accountId,
+ const std::string& conversationId,
+ const std::string& fromMessage,
+ const std::string& toMessage)
+ {
+ return libjami::loadSwarmUntil(accountId, conversationId, fromMessage, toMessage);
+ }
+
uint32_t
countInteractions(const std::string& accountId,
const std::string& conversationId,
diff --git a/bin/jni/conversation.i b/bin/jni/conversation.i
index 0f992f75e..f591fad80 100644
--- a/bin/jni/conversation.i
+++ b/bin/jni/conversation.i
@@ -45,6 +45,7 @@ public:
%}
%feature("director") ConversationCallback;
+%template(SwarmMessageVect) std::vector;
namespace libjami {
@@ -81,6 +82,7 @@ struct SwarmMessage
uint32_t loadConversationMessages(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, size_t n);
uint32_t loadConversation(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, size_t n);
uint32_t loadConversationUntil(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, const std::string& toMessage);
+ uint32_t loadSwarmUntil(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, const std::string& toMessage);
uint32_t countInteractions(const std::string& accountId, const std::string& conversationId, const std::string& toId, const std::string& fromId, const std::string& authorUri);
void clearCache(const std::string& accountId, const std::string& conversationId);
uint32_t searchConversation(const std::string& accountId,
diff --git a/bin/nodejs/conversation.i b/bin/nodejs/conversation.i
index a04dcc932..06c6d8339 100644
--- a/bin/nodejs/conversation.i
+++ b/bin/nodejs/conversation.i
@@ -81,6 +81,7 @@ struct SwarmMessage
uint32_t loadConversationMessages(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, size_t n);
uint32_t loadConversation(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, size_t n);
uint32_t loadConversationUntil(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, const std::string& toMessage);
+ uint32_t loadSwarmUntil(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, const std::string& toMessage);
void clearCache(const std::string& accountId, const std::string& conversationId);
uint32_t countInteractions(const std::string& accountId, const std::string& conversationId, const std::string& toId, const std::string& fromId, const std::string& authorUri);
uint32_t searchConversation(const std::string& accountId,
diff --git a/configure.ac b/configure.ac
index cdea5ff1c..151ee7e2a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ dnl Jami - configure.ac
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
-AC_INIT([Jami Daemon],[15.0.0],[jami@gnu.org],[jami])
+AC_INIT([Jami Daemon],[15.1.0],[jami@gnu.org],[jami])
dnl Clear the implicit flags that default to '-g -O2', otherwise they
dnl take precedence over the values we set via the
diff --git a/meson.build b/meson.build
index 97ae791a1..bee2343fd 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('jami-daemon', ['c', 'cpp'],
- version: '14.0.0',
+ version: '15.1.0',
license: 'GPL3+',
default_options: ['cpp_std=gnu++17', 'buildtype=debugoptimized'],
meson_version:'>= 0.56'
diff --git a/src/client/conversation_interface.cpp b/src/client/conversation_interface.cpp
index 90d827169..840e54b90 100644
--- a/src/client/conversation_interface.cpp
+++ b/src/client/conversation_interface.cpp
@@ -219,6 +219,18 @@ loadConversationUntil(const std::string& accountId,
return 0;
}
+uint32_t
+loadSwarmUntil(const std::string& accountId,
+ const std::string& conversationId,
+ const std::string& fromMessage,
+ const std::string& toMessage)
+{
+ if (auto acc = jami::Manager::instance().getAccount(accountId))
+ if (auto convModule = acc->convModule())
+ return convModule->loadSwarmUntil(conversationId, fromMessage, toMessage);
+ return 0;
+}
+
uint32_t
countInteractions(const std::string& accountId,
const std::string& conversationId,
diff --git a/src/jami/conversation_interface.h b/src/jami/conversation_interface.h
index fc05a6e23..f1ac0dee0 100644
--- a/src/jami/conversation_interface.h
+++ b/src/jami/conversation_interface.h
@@ -104,6 +104,10 @@ LIBJAMI_PUBLIC uint32_t loadConversationUntil(const std::string& accountId,
const std::string& conversationId,
const std::string& fromMessage,
const std::string& toMessage);
+LIBJAMI_PUBLIC uint32_t loadSwarmUntil(const std::string& accountId,
+ const std::string& conversationId,
+ const std::string& fromMessage,
+ const std::string& toMessage);
LIBJAMI_PUBLIC uint32_t countInteractions(const std::string& accountId,
const std::string& conversationId,
const std::string& toId,
diff --git a/src/jamidht/conversation_module.cpp b/src/jamidht/conversation_module.cpp
index f84308b63..80de95979 100644
--- a/src/jamidht/conversation_module.cpp
+++ b/src/jamidht/conversation_module.cpp
@@ -2082,6 +2082,34 @@ ConversationModule::loadConversationUntil(const std::string& conversationId,
return 0;
}
+uint32_t
+ConversationModule::loadSwarmUntil(const std::string& conversationId,
+ const std::string& fromMessage,
+ const std::string& toMessage)
+{
+ auto acc = pimpl_->account_.lock();
+ if (auto conv = pimpl_->getConversation(conversationId)) {
+ std::lock_guard lk(conv->mtx);
+ if (conv->conversation) {
+ const uint32_t id = std::uniform_int_distribution {}(acc->rand);
+ LogOptions options;
+ options.from = fromMessage;
+ options.to = toMessage;
+ options.includeTo = true;
+ conv->conversation->loadMessages2(
+ [accountId = pimpl_->accountId_, conversationId, id](auto&& messages) {
+ emitSignal(id,
+ accountId,
+ conversationId,
+ messages);
+ },
+ options);
+ return id;
+ }
+ }
+ return 0;
+}
+
std::shared_ptr
ConversationModule::dataTransfer(const std::string& conversationId) const
{
diff --git a/src/jamidht/conversation_module.h b/src/jamidht/conversation_module.h
index 40269f621..034191de3 100644
--- a/src/jamidht/conversation_module.h
+++ b/src/jamidht/conversation_module.h
@@ -232,6 +232,9 @@ public:
uint32_t loadConversationUntil(const std::string& conversationId,
const std::string& fromMessage,
const std::string& to);
+ uint32_t loadSwarmUntil(const std::string& conversationId,
+ const std::string& fromMessage,
+ const std::string& toMessage);
/**
* Clear loaded interactions
* @param conversationId