diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml index 891b3137e3ac3758f5f38ad5b83eb9312bf9693d..307856c836a20da372a5522d3a3cfae8b0e2513b 100644 --- a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml +++ b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml @@ -1774,6 +1774,18 @@ <arg type="u" name="id" direction="out"/> </method> + <method name="loadConversationUntil" tp:name-for-bindings="loadConversationUntil"> + <tp:added version="10.0.0"/> + <tp:docstring> + Load messages from a conversation + </tp:docstring> + <arg type="s" name="accountId" direction="in"/> + <arg type="s" name="conversationId" direction="in"/> + <arg type="s" name="fromMessage" direction="in"/> + <arg type="s" name="to" direction="in"/> + <arg type="u" name="id" direction="out"/> + </method> + <method name="countInteractions" tp:name-for-bindings="countInteractions"> <tp:added version="10.0.0"/> <tp:docstring> diff --git a/bin/dbus/dbusconfigurationmanager.cpp b/bin/dbus/dbusconfigurationmanager.cpp index ebe07adc767f7ee98d5be49bc9bdf6596633e95f..3fffa78e705174cb03cd4a282d56cf5d729c4e1e 100644 --- a/bin/dbus/dbusconfigurationmanager.cpp +++ b/bin/dbus/dbusconfigurationmanager.cpp @@ -920,6 +920,15 @@ DBusConfigurationManager::loadConversationMessages(const std::string& accountId, return DRing::loadConversationMessages(accountId, conversationId, fromMessage, n); } +uint32_t +DBusConfigurationManager::loadConversationUntil(const std::string& accountId, + const std::string& conversationId, + const std::string& fromMessage, + const std::string& to) +{ + return DRing::loadConversationUntil(accountId, conversationId, fromMessage, to); +} + uint32_t DBusConfigurationManager::countInteractions(const std::string& accountId, const std::string& conversationId, diff --git a/bin/dbus/dbusconfigurationmanager.h b/bin/dbus/dbusconfigurationmanager.h index 0224aa6b89daf24f0b2291ec3603949607191831..86357d49c25972fc5c23b02286d6f8d38a3893b8 100644 --- a/bin/dbus/dbusconfigurationmanager.h +++ b/bin/dbus/dbusconfigurationmanager.h @@ -281,6 +281,10 @@ public: const std::string& conversationId, const std::string& fromMessage, const uint32_t& n); + uint32_t loadConversationUntil(const std::string& accountId, + const std::string& conversationId, + const std::string& fromMessage, + const std::string& to); uint32_t countInteractions(const std::string& accountId, const std::string& conversationId, const std::string& toId, diff --git a/bin/jni/conversation.i b/bin/jni/conversation.i index db4fc2205979ee7071eea79ddd0445b3877f4078..d076d8206ad12bf593ffc9bc28ab62b3d622c71c 100644 --- a/bin/jni/conversation.i +++ b/bin/jni/conversation.i @@ -59,6 +59,7 @@ namespace DRing { // Message send/load void sendMessage(const std::string& accountId, const std::string& conversationId, const std::string& message, const std::string& replyTo); uint32_t loadConversationMessages(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 countInteractions(const std::string& accountId, const std::string& conversationId, const std::string& toId, const std::string& fromId, const std::string& authorUri); } diff --git a/bin/nodejs/conversation.i b/bin/nodejs/conversation.i index 7d0d94c4c4f7b5b9ec536fb957ec977b8d2b3546..c63ed3bf7aba6102cc2e6295ed609b63d1892e64 100644 --- a/bin/nodejs/conversation.i +++ b/bin/nodejs/conversation.i @@ -59,6 +59,7 @@ namespace DRing { // Message send/load void sendMessage(const std::string& accountId, const std::string& conversationId, const std::string& message, const std::string& replyTo); uint32_t loadConversationMessages(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 countInteractions(const std::string& accountId, const std::string& conversationId, const std::string& toId, const std::string& fromId, const std::string& authorUri); } diff --git a/src/client/conversation_interface.cpp b/src/client/conversation_interface.cpp index 91adc77d0a824cd495aef83b92a8b950482cf4ce..9ce74993ebe52551c07330070cd90accc7883bdf 100644 --- a/src/client/conversation_interface.cpp +++ b/src/client/conversation_interface.cpp @@ -160,6 +160,18 @@ loadConversationMessages(const std::string& accountId, return 0; } +uint32_t +loadConversationUntil(const std::string& accountId, + const std::string& conversationId, + const std::string& fromMessage, + const std::string& toMessage) +{ + if (auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>(accountId)) + if (auto convModule = acc->convModule()) + return convModule->loadConversationUntil(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 63bbdc8012089c54503769e10c1ea56509f963b5..931b1fc6336ae632f4ad010307e4afd40910c9f6 100644 --- a/src/jami/conversation_interface.h +++ b/src/jami/conversation_interface.h @@ -69,6 +69,10 @@ DRING_PUBLIC uint32_t loadConversationMessages(const std::string& accountId, const std::string& conversationId, const std::string& fromMessage, size_t n); +DRING_PUBLIC uint32_t loadConversationUntil(const std::string& accountId, + const std::string& conversationId, + const std::string& fromMessage, + const std::string& toMessage); DRING_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 d0009f3c379cace4fb841373be7b93d461bd2071..bd32ff9ce59374f805350c33ceb1dcddca6c24f2 100644 --- a/src/jamidht/conversation_module.cpp +++ b/src/jamidht/conversation_module.cpp @@ -1261,6 +1261,30 @@ ConversationModule::loadConversationMessages(const std::string& conversationId, return 0; } +uint32_t +ConversationModule::loadConversationUntil(const std::string& conversationId, + const std::string& fromMessage, + const std::string& toMessage) +{ + std::lock_guard<std::mutex> lk(pimpl_->conversationsMtx_); + auto acc = pimpl_->account_.lock(); + auto conversation = pimpl_->conversations_.find(conversationId); + if (acc && conversation != pimpl_->conversations_.end() && conversation->second) { + const uint32_t id = std::uniform_int_distribution<uint32_t> {}(acc->rand); + conversation->second->loadMessages( + [accountId = pimpl_->accountId_, conversationId, id](auto&& messages) { + emitSignal<DRing::ConversationSignal::ConversationLoaded>(id, + accountId, + conversationId, + messages); + }, + fromMessage, + toMessage); + return id; + } + return 0; +} + std::shared_ptr<TransferManager> ConversationModule::dataTransfer(const std::string& id) const { diff --git a/src/jamidht/conversation_module.h b/src/jamidht/conversation_module.h index 2c4d38008316e8368401369bebba91f05c1c339b..e0454cbd8d179b633b96e883c4924b37ed38c49b 100644 --- a/src/jamidht/conversation_module.h +++ b/src/jamidht/conversation_module.h @@ -171,6 +171,9 @@ public: uint32_t loadConversationMessages(const std::string& conversationId, const std::string& fromMessage = "", size_t n = 0); + uint32_t loadConversationUntil(const std::string& conversationId, + const std::string& fromMessage, + const std::string& to); // File transfer /**