Working XHTML-IM from legacy network -> XMPP
This commit is contained in:
parent
a9ccbdc501
commit
8720eb9678
4 changed files with 29 additions and 7 deletions
|
@ -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 =
|
||||
|
|
|
@ -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 = "");
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Reference in a new issue