Working XHTML-IM from legacy network -> XMPP

This commit is contained in:
HanzZ 2011-06-22 23:23:52 +02:00
parent a9ccbdc501
commit 8720eb9678
4 changed files with 29 additions and 7 deletions

View file

@ -616,22 +616,39 @@ static PurpleBlistUiOps blistUiOps =
NULL
};
static void conv_write_im(PurpleConversation *conv, const char *who, const char *message, PurpleMessageFlags flags, time_t mtime) {
static void conv_write_im(PurpleConversation *conv, const char *who, const char *msg, PurpleMessageFlags flags, time_t mtime) {
// Don't forwards our own messages.
if (flags & PURPLE_MESSAGE_SEND || flags & PURPLE_MESSAGE_SYSTEM)
return;
PurpleAccount *account = purple_conversation_get_account(conv);
char *striped = purple_markup_strip_html(message);
std::string msg = striped;
g_free(striped);
// char *striped = purple_markup_strip_html(message);
// std::string msg = striped;
// g_free(striped);
std::string w = who;
size_t pos = w.find("/");
if (pos != std::string::npos)
w.erase((int) pos, w.length() - (int) pos);
np->handleMessage(np->m_accounts[account], w, msg);
// Escape HTML characters.
char *newline = purple_strdup_withhtml(msg);
char *strip, *xhtml, *xhtml_linkified;
purple_markup_html_to_xhtml(newline, &xhtml, &strip);
xhtml_linkified = purple_markup_linkify(xhtml);
std::string message_(strip);
std::string xhtml_(xhtml_linkified);
g_free(newline);
g_free(xhtml);
g_free(xhtml_linkified);
g_free(strip);
if (xhtml_ == message_) {
xhtml_ = "";
}
np->handleMessage(np->m_accounts[account], w, message_, "", xhtml_);
}
static PurpleConversationUiOps conversation_ui_ops =

View file

@ -50,7 +50,7 @@ class NetworkPlugin {
void handleConnected(const std::string &user);
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "", const std::string &xhtml = "");
void handleSubject(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "");

View file

@ -62,12 +62,13 @@ NetworkPlugin::~NetworkPlugin() {
delete m_factories;
}
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg, const std::string &nickname) {
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg, const std::string &nickname, const std::string &xhtml) {
pbnetwork::ConversationMessage m;
m.set_username(user);
m.set_buddyname(legacyName);
m.set_message(msg);
m.set_nickname(nickname);
m.set_xhtml(xhtml);
std::string message;
m.SerializeToString(&message);

View file

@ -392,6 +392,10 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool
msg->setBody(payload.message());
}
if (!payload.xhtml().empty()) {
msg->addPayload(boost::make_shared<Swift::XHTMLIMPayload>(payload.xhtml()));
}
NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.buddyname());
if (!conv) {
conv = new NetworkConversation(user->getConversationManager(), payload.buddyname());