From 2438254a514b1eb3ffe8b90d5a8ac45263542a49 Mon Sep 17 00:00:00 2001 From: agsantos <aline.gondimsantos@savoirfairelinux.com> Date: Mon, 14 Dec 2020 13:41:23 -0500 Subject: [PATCH] plugins: attach swarm and Plugins System Change-Id: I136f5ba49f14a379ec6dce37fbd837e38d90f549 --- src/jamidht/conversation.cpp | 33 ++++++++++++++++++++++++++++++ src/plugin/chatservicesmanager.cpp | 16 ++++++++++++++- src/plugin/streamdata.h | 2 ++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp index 176b60f525..c6cbce985e 100644 --- a/src/jamidht/conversation.cpp +++ b/src/jamidht/conversation.cpp @@ -29,6 +29,12 @@ #include <opendht/thread_pool.h> #include <tuple> +#ifdef ENABLE_PLUGIN +#include "manager.h" +#include "plugin/jamipluginmanager.h" +#include "plugin/streamdata.h" +#endif + namespace jami { ConvInfo::ConvInfo(const Json::Value& json) @@ -196,6 +202,19 @@ public: shared->getAccountID(), convId, uri, action); } } +#ifdef ENABLE_PLUGIN + auto& pluginChatManager + = jami::Manager::instance().getJamiPluginManager().getChatServicesManager(); + std::shared_ptr<JamiMessage> cm + = std::make_shared<JamiMessage>(shared->getAccountID(), + convId, + c.at("author") != shared->getUsername(), + const_cast<std::map<std::string, std::string>&>( + c), + false); + cm->isSwarm = true; + pluginChatManager.publishMessage(cm); +#endif // announce message emitSignal<DRing::ConversationSignal::MessageReceived>(shared->getAccountID(), convId, @@ -244,6 +263,7 @@ Conversation::Impl::repoPath() const std::vector<std::map<std::string, std::string>> Conversation::Impl::convCommitToMap(const std::vector<ConversationCommit>& commits) const { + auto shared = account_.lock(); std::vector<std::map<std::string, std::string>> result = {}; for (const auto& commit : commits) { auto authorDevice = commit.author.email; @@ -309,6 +329,19 @@ Conversation::Impl::convCommitToMap(const std::vector<ConversationCommit>& commi message["type"] = type; message["timestamp"] = std::to_string(commit.timestamp); result.emplace_back(message); +#ifdef ENABLE_PLUGIN + auto& pluginChatManager + = jami::Manager::instance().getJamiPluginManager().getChatServicesManager(); + std::shared_ptr<JamiMessage> cm + = std::make_shared<JamiMessage>(shared->getAccountID(), + repository_->id(), + authorId != shared->getUsername(), + const_cast<std::map<std::string, std::string>&>(message), + false); + cm->isSwarm = true; + cm->fromHistory = true; + pluginChatManager.publishMessage(cm); +#endif } return result; } diff --git a/src/plugin/chatservicesmanager.cpp b/src/plugin/chatservicesmanager.cpp index 104947e239..6d8b48ed43 100644 --- a/src/plugin/chatservicesmanager.cpp +++ b/src/plugin/chatservicesmanager.cpp @@ -20,6 +20,7 @@ #include "pluginmanager.h" #include "logger.h" #include "manager.h" +#include "jamidht/jamiaccount.h" #include "fileutils.h" namespace jami { @@ -90,7 +91,20 @@ ChatServicesManager::registerChatService(PluginManager& pluginManager) // sendTextMessage is a service that allows plugins to send a message in a conversation. auto sendTextMessage = [](const DLPlugin*, void* data) { auto cm = static_cast<JamiMessage*>(data); - jami::Manager::instance().sendTextMessage(cm->accountId, cm->peerId, cm->data, true); + if (const auto acc = jami::Manager::instance().getAccount<jami::JamiAccount>( + cm->accountId)) { + try { + if (cm->isSwarm) + acc->sendMessage(cm->peerId, cm->data.at("body")); + else + jami::Manager::instance().sendTextMessage(cm->accountId, + cm->peerId, + cm->data, + true); + } catch (const std::exception& e) { + JAMI_ERR("Exception during text message sending: %s", e.what()); + } + } return 0; }; diff --git a/src/plugin/streamdata.h b/src/plugin/streamdata.h index 8e33f63913..e8a49f4bef 100644 --- a/src/plugin/streamdata.h +++ b/src/plugin/streamdata.h @@ -88,4 +88,6 @@ struct JamiMessage std::map<std::string, std::string> data; // True if message is originated from Plugin code. bool fromPlugin; + bool isSwarm {false}; + bool fromHistory {false}; }; \ No newline at end of file -- GitLab