--- a/libpurple/protocols/jabber/message.c Tue Mar 21 20:08:45 2017 -0500
+++ b/libpurple/protocols/jabber/message.c Fri Mar 24 05:16:05 2017 +0000
@@ -39,6 +39,48 @@
+static GString *jm_body_with_oob(JabberMessage *jm) { + GString *body = g_string_new(""); + g_string_append(body, jm->xhtml); + g_string_append(body, jm->body); + for(etc = jm->etc; etc; etc = etc->next) { + xmlnode *x = etc->data; + const char *xmlns = xmlnode_get_namespace(x); + if(xmlns && !strcmp(xmlns, NS_OOB_X_DATA)) { + char *urltxt, *desctxt; + url = xmlnode_get_child(x, "url"); + desc = xmlnode_get_child(x, "desc"); + urltxt = xmlnode_get_data(url); + desctxt = desc ? xmlnode_get_data(desc) : urltxt; + if(body->len && strcmp(body->str, urltxt)) + g_string_append_printf(body, "<br/><a href='%s'>%s</a>", + g_string_printf(body, "<a href='%s'>%s</a>", void jabber_message_free(JabberMessage *jm)
@@ -64,6 +106,7 @@
JabberBuddyResource *jbr;
@@ -74,15 +117,17 @@
jb = jabber_buddy_find(jm->js, jm->from, TRUE);
jbr = jabber_buddy_find_resource(jb, jid->resource);
- if(!jm->xhtml && !jm->body) {
- if (jbr && jm->chat_state != JM_STATE_NONE)
- jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED;
+ if (jbr && jm->chat_state != JM_STATE_NONE) + jbr->chat_states = JABBER_CHAT_STATES_SUPPORTED; - if(JM_STATE_COMPOSING == jm->chat_state) {
+ switch(jm->chat_state) { + case JM_STATE_COMPOSING: serv_got_typing(gc, jm->from, 0, PURPLE_TYPING);
- } else if(JM_STATE_PAUSED == jm->chat_state) {
serv_got_typing(gc, jm->from, 0, PURPLE_TYPED);
- } else if(JM_STATE_GONE == jm->chat_state) {
PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM,
if (conv && jid->node && jid->domain) {
@@ -110,11 +155,21 @@
serv_got_typing_stopped(gc, jm->from);
serv_got_typing_stopped(gc, jm->from);
+ if (jm->js->googletalk && jm->body && jm->xhtml == NULL) { + jm->body = jabber_google_format_to_html(jm->body); + body = jm_body_with_oob(jm); + if(body && body->len) { * We received a message from a specific resource, so
@@ -151,63 +206,26 @@
jbr->thread_id = g_strdup(jbr->thread_id);
- if (jm->js->googletalk && jm->xhtml == NULL) {
- jm->body = jabber_google_format_to_html(jm->body);
- serv_got_im(gc, jm->from, jm->xhtml ? jm->xhtml : jm->body, 0, jm->sent);
+ serv_got_im(gc, jm->from, body->str, 0, jm->sent); + g_string_free(body, TRUE); static void handle_headline(JabberMessage *jm)
if(!jm->xhtml && !jm->body)
return; /* ignore headlines without any content */
- body = g_string_new("");
+ body = jm_body_with_oob(jm); title = g_strdup_printf(_("Message from %s"), jm->from);
- g_string_append(body, jm->xhtml);
- g_string_append(body, jm->body);
- for(etc = jm->etc; etc; etc = etc->next) {
- xmlnode *x = etc->data;
- const char *xmlns = xmlnode_get_namespace(x);
- if(xmlns && !strcmp(xmlns, NS_OOB_X_DATA)) {
- char *urltxt, *desctxt;
- url = xmlnode_get_child(x, "url");
- desc = xmlnode_get_child(x, "desc");
- urltxt = xmlnode_get_data(url);
- desctxt = xmlnode_get_data(desc);
- /* I'm all about ugly hacks */
- if(body->len && jm->body && !strcmp(body->str, jm->body))
- g_string_printf(body, "<a href='%s'>%s</a>",
- g_string_append_printf(body, "<br/><a href='%s'>%s</a>",
purple_notify_formatted(jm->js->gc, title, jm->subject ? jm->subject : title,
NULL, body->str, NULL, NULL);