diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 830d065e8e78fadf24175d51f38e984622fdf9b3..55f3b335f0b62b81e4ceefdb70ac9e4ae5a1d557 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -686,6 +686,33 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool m_userManager->messageToXMPPSent(); } +void NetworkPluginServer::handleConvMessageAckPayload(const std::string &data) { + pbnetwork::ConversationMessage payload; + + if (payload.ParseFromString(data) == false) { + // TODO: ERROR + return; + } + + User *user = m_userManager->getUser(payload.username()); + if (!user) + return; + + + boost::shared_ptr msg(new Swift::Message()); + msg->addPayload(boost::make_shared(payload.id())); + + NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.buddyname()); + + // Receipts don't create conversation + if (!conv) { + return; + } + + // Forward it + conv->handleMessage(msg); +} + void NetworkPluginServer::handleAttentionPayload(const std::string &data) { pbnetwork::ConversationMessage payload; if (payload.ParseFromString(data) == false) { @@ -1023,6 +1050,9 @@ void NetworkPluginServer::handleDataRead(Backend *c, boost::shared_ptrgetLegacyName()); m.set_message(msg->getBody()); m.set_xhtml(xhtml); + boost::shared_ptr receiptPayload = msg->getPayload(); + if (receiptPayload && !msg->getID().empty()) { + m.set_id(msg->getID()); + } std::string message; m.SerializeToString(&message);