From a9ccbdc50107adc88feac0452cb672e1f3f24a6e 2011-06-22 23:05:40 From: HanzZ Date: 2011-06-22 23:05:40 Subject: [PATCH] Working XHTML from XMPP to legacy network --- diff --git a/backends/libircclient-qt/main.cpp b/backends/libircclient-qt/main.cpp index b021bf3c1b66fb6ac613dd20781ac33abcf59f34..be26ffcc76349091e892d37f91c12647df993838 100644 --- a/backends/libircclient-qt/main.cpp +++ b/backends/libircclient-qt/main.cpp @@ -42,7 +42,7 @@ class IRCNetworkPlugin : public NetworkPlugin { m_sessions[user]->deleteLater(); } - void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) { + void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &/*xhtml*/) { std::cout << "MESSAGE " << user << " " << legacyName << "\n"; if (m_sessions[user] == NULL) return; diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 29f049dd7001cc2a64be2c064cb5d772d6ae953a..2c6c9964813b9d1d508f80c6ef8b3b81ba3d3bd2 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -259,16 +259,22 @@ class SpectrumNetworkPlugin : public NetworkPlugin { } } - void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) { + void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml) { PurpleAccount *account = m_sessions[user]; if (account) { PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, legacyName.c_str(), account); if (!conv) { conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, legacyName.c_str()); } - gchar *_markup = purple_markup_escape_text(message.c_str(), -1); - purple_conv_im_send(PURPLE_CONV_IM(conv), _markup); - g_free(_markup); + if (xhtml.empty()) { + gchar *_markup = purple_markup_escape_text(message.c_str(), -1); + purple_conv_im_send(PURPLE_CONV_IM(conv), _markup); + g_free(_markup); + } + else { + std::cout << xhtml << "\n"; + purple_conv_im_send(PURPLE_CONV_IM(conv), xhtml.c_str()); + } } } diff --git a/include/Swiften/Parser/PayloadParsers/XHTMLIMParser.cpp b/include/Swiften/Parser/PayloadParsers/XHTMLIMParser.cpp index 32f90d29ad9e2fcd412c35685e210879297a1a69..53444af22b6012ea9bf413acee8124f2bfb2fb2e 100644 --- a/include/Swiften/Parser/PayloadParsers/XHTMLIMParser.cpp +++ b/include/Swiften/Parser/PayloadParsers/XHTMLIMParser.cpp @@ -21,7 +21,7 @@ void XHTMLIMParser::handleStartElement(const std::string& element, const std::st } } else if (level_ >= InsideBodyLevel && bodyParser_) { - bodyParser_->handleStartElement(element, ns, attributes); + bodyParser_->handleStartElement(element, "", attributes); } } diff --git a/include/transport/networkplugin.h b/include/transport/networkplugin.h index b71ba67788ab27ba7e4d95bb99718c4dc2b509cd..80d6b80f9823fcb05f82badb1ee951e990621945 100644 --- a/include/transport/networkplugin.h +++ b/include/transport/networkplugin.h @@ -70,7 +70,7 @@ class NetworkPlugin { virtual void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) = 0; virtual void handleLogoutRequest(const std::string &user, const std::string &legacyName) = 0; - virtual void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message) = 0; + virtual void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml = "") = 0; virtual void handleVCardRequest(const std::string &/*user*/, const std::string &/*legacyName*/, unsigned int /*id*/) {} virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/) {} virtual void handleJoinRoomRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*nickname*/, const std::string &/*pasword*/) {} diff --git a/src/networkplugin.cpp b/src/networkplugin.cpp index 06c3d2697cdb84fcac43a0f269815c2e50487bb6..21bbbae8906ea23e125570c1ebe5e3377160fd93 100644 --- a/src/networkplugin.cpp +++ b/src/networkplugin.cpp @@ -313,7 +313,7 @@ void NetworkPlugin::handleConvMessagePayload(const std::string &data) { return; } - handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message()); + handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message(), payload.xhtml()); } void NetworkPlugin::handleAttentionPayload(const std::string &data) { diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 4e016af3d911b43f253c0cc98d80bde6b1335a95..8538e661625472b0913bc52f7bacbbba5da618fe 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -35,6 +35,7 @@ #include "Swiften/Elements/StreamError.h" #include "Swiften/Network/BoostConnectionServer.h" #include "Swiften/Elements/AttentionPayload.h" +#include "Swiften/Elements/XHTMLIMPayload.h" #include "pbnetwork.pb.h" #include "sys/wait.h" #include "sys/signal.h" @@ -645,7 +646,7 @@ void NetworkPluginServer::handleUserDestroyed(User *user) { } void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost::shared_ptr &msg) { - + // handle ChatState boost::shared_ptr statePayload = msg->getPayload(); if (statePayload) { pbnetwork::WrapperMessage_Type type = pbnetwork::WrapperMessage_Type_TYPE_BUDDY_CHANGED; @@ -677,6 +678,7 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost } } + // Handle attention requests boost::shared_ptr attentionPayload = msg->getPayload(); if (attentionPayload) { pbnetwork::ConversationMessage m; @@ -693,13 +695,20 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost send(c->connection, message); return; } - - if (!msg->getBody().empty()) { + std::string xhtml; + boost::shared_ptr xhtmlPayload = msg->getPayload(); + if (xhtmlPayload) { + xhtml = xhtmlPayload->getBody(); + } + + // Send normal message + if (!msg->getBody().empty() || !xhtml.empty()) { pbnetwork::ConversationMessage m; m.set_username(conv->getConversationManager()->getUser()->getJID().toBare()); m.set_buddyname(conv->getLegacyName()); m.set_message(msg->getBody()); + m.set_xhtml(xhtml); std::string message; m.SerializeToString(&message); diff --git a/src/pbnetwork.proto b/src/pbnetwork.proto index 66878e4649520724b23b73818f6fdb9f7b673efe..83e0dcd806ee56668ae156defd837c57ea47881e 100644 --- a/src/pbnetwork.proto +++ b/src/pbnetwork.proto @@ -37,6 +37,7 @@ message ConversationMessage { required string buddyName = 2; required string message = 3; optional string nickname = 4; + optional string xhtml = 5; } message Room {