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