Working XHTML from XMPP to legacy network

This commit is contained in:
HanzZ 2011-06-22 23:05:40 +02:00
parent 64f1921f8d
commit a9ccbdc501
7 changed files with 27 additions and 11 deletions

View file

@ -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;

View file

@ -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());
}
}
}

View file

@ -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);
}
}

View file

@ -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*/) {}

View file

@ -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) {

View file

@ -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<Swift::Message> &msg) {
// handle ChatState
boost::shared_ptr<Swift::ChatState> statePayload = msg->getPayload<Swift::ChatState>();
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<Swift::AttentionPayload> attentionPayload = msg->getPayload<Swift::AttentionPayload>();
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<Swift::XHTMLIMPayload> xhtmlPayload = msg->getPayload<Swift::XHTMLIMPayload>();
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);

View file

@ -37,6 +37,7 @@ message ConversationMessage {
required string buddyName = 2;
required string message = 3;
optional string nickname = 4;
optional string xhtml = 5;
}
message Room {