Working XHTML from XMPP to legacy network
This commit is contained in:
parent
64f1921f8d
commit
a9ccbdc501
7 changed files with 27 additions and 11 deletions
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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*/) {}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -37,6 +37,7 @@ message ConversationMessage {
|
|||
required string buddyName = 2;
|
||||
required string message = 3;
|
||||
optional string nickname = 4;
|
||||
optional string xhtml = 5;
|
||||
}
|
||||
|
||||
message Room {
|
||||
|
|
Loading…
Add table
Reference in a new issue