# HG changeset patch # User Eric Warmenhoven # Date 986402720 0 # Node ID 4328efeb531e8b49fdfd5323779e4ba7eb8c12f8 # Parent 4a129d9f9b4f38561ce7cee0543b922cf8a41ed2 [gaim-migrate @ 1692] fix for links in messages, and also some chat updates (chat still does funny things but i think now at least you won't see 5 of the same person in the room) committer: Tailor Script diff -r 4a129d9f9b4f -r 4328efeb531e plugins/jabber/jabber.c --- a/plugins/jabber/jabber.c Tue Apr 03 01:52:08 2001 +0000 +++ b/plugins/jabber/jabber.c Wed Apr 04 16:45:20 2001 +0000 @@ -457,12 +457,26 @@ return b; } +static gboolean find_chat_buddy(struct conversation *b, char *name) +{ + GList *m = b->in_room; + + while (m) { + if (!strcasecmp(m->data, name)) + return TRUE; + m = m->next; + } + + return FALSE; +} + static void jabber_handlemessage(gjconn j, jpacket p) { xmlnode y; gboolean same = TRUE; char *from = NULL, *msg = NULL, *type = NULL; + char m[BUF_LONG * 2]; type = xmlnode_get_attrib(p->x, "type"); @@ -481,7 +495,8 @@ same = FALSE; } - serv_got_im(GJ_GC(j), from, msg, 0); + g_snprintf(m, sizeof(m), "%s", msg); + serv_got_im(GJ_GC(j), from, m, 0); if (!same) g_free(from); @@ -524,9 +539,17 @@ } } if (p->from->resource) { - if (!y) - add_chat_buddy(b, p->from->resource); - else if (msg) + if (!y) { + if (!find_chat_buddy(b, p->from->resource)) + add_chat_buddy(b, p->from->resource); + else if ((y = xmlnode_get_tag(p->x, "status"))) { + char buf[8192]; + msg = xmlnode_get_data(y); + g_snprintf(buf, sizeof(buf), "%s now has status: %s", + p->from->resource, msg); + write_to_conv(b, buf, WFLAG_SYSTEM, NULL); + } + } else if (msg) serv_got_chat_in(GJ_GC(j), b->id, p->from->resource, 0, msg); /* } else if (msg) { @@ -653,7 +676,15 @@ jd->existing_chats = g_slist_remove(jd->existing_chats, bcs->data); serv_got_chat_left(GJ_GC(j), cnv->id); } else { - add_chat_buddy(cnv, who->resource); + if (!find_chat_buddy(cnv, who->resource)) + add_chat_buddy(cnv, who->resource); + else if ((y = xmlnode_get_tag(p->x, "status"))) { + char buf[8192]; + char *msg = xmlnode_get_data(y); + g_snprintf(buf, sizeof(buf), "%s now has status: %s", + p->from->resource, msg); + write_to_conv(cnv, buf, WFLAG_SYSTEM, NULL); + } } } }