# HG changeset patch # User Mikael Berthe # Date 1128708731 -7200 # Node ID 21ab22a60bcb76a68d9a24cd4fd32d578a5c12f2 # Parent 9e8519078e0054db16aa36a8efa79cd1f21c0b10 Auto-convert a roster item to "room" type when receiving a groupchat message diff -r 9e8519078e00 -r 21ab22a60bcb mcabber/src/hooks.c --- a/mcabber/src/hooks.c Fri Oct 07 19:15:26 2005 +0200 +++ b/mcabber/src/hooks.c Fri Oct 07 20:12:11 2005 +0200 @@ -66,6 +66,9 @@ if (bmsg) g_free(bmsg); return; } + } else if (is_groupchat) { + // Make sure the type is ROOM + buddy_settype(roster_usr->data, ROSTER_TYPE_ROOM); } is_room = !!(buddy_gettype(roster_usr->data) & ROSTER_TYPE_ROOM); diff -r 9e8519078e00 -r 21ab22a60bcb mcabber/src/jabglue.c --- a/mcabber/src/jabglue.c Fri Oct 07 19:15:26 2005 +0200 +++ b/mcabber/src/jabglue.c Fri Oct 07 20:12:11 2005 +0200 @@ -678,7 +678,7 @@ } void gotmessage(char *type, const char *from, const char *body, - const char *enc, time_t timestamp) + const char *enc, time_t timestamp) { char *jid; const char *rname; @@ -889,7 +889,7 @@ else r = s; // Display inside the room window mbuf = g_strdup_printf("%s has set the topic to: %s", r, - (subj_noutf8 ? subj_noutf8 : "(?)")); + (subj_noutf8 ? subj_noutf8 : "(?)")); scr_WriteIncomingMessage(s, mbuf, 0, HBB_PREFIX_INFO); if (settings_opt_get_int("log_muc_conf")) hlog_write_message(s, 0, FALSE, mbuf); @@ -1134,7 +1134,11 @@ int log_muc_conf = settings_opt_get_int("log_muc_conf"); // Add room if it doesn't already exist - room_elt = roster_add_user(r, NULL, NULL, ROSTER_TYPE_ROOM); + room_elt = roster_find(r, jidsearch, 0); + if (!room_elt) + room_elt = roster_add_user(r, NULL, NULL, ROSTER_TYPE_ROOM); + else // Make sure this is a room (it can be a conversion user->room) + buddy_settype(room_elt->data, ROSTER_TYPE_ROOM); // Get room member's information y = xmlnode_get_tag(x, "item"); diff -r 9e8519078e00 -r 21ab22a60bcb mcabber/src/roster.c --- a/mcabber/src/roster.c Fri Oct 07 19:15:26 2005 +0200 +++ b/mcabber/src/roster.c Fri Oct 07 20:12:11 2005 +0200 @@ -798,6 +798,12 @@ return (gpointer)((GSList*)roster_usr->list)->data; } +void buddy_settype(gpointer rosterdata, guint type) +{ + roster *roster_usr = rosterdata; + roster_usr->type = type; +} + guint buddy_gettype(gpointer rosterdata) { roster *roster_usr = rosterdata; diff -r 9e8519078e00 -r 21ab22a60bcb mcabber/src/roster.h --- a/mcabber/src/roster.h Fri Oct 07 19:15:26 2005 +0200 +++ b/mcabber/src/roster.h Fri Oct 07 20:12:11 2005 +0200 @@ -71,6 +71,7 @@ const char *buddy_getname(gpointer rosterdata); void buddy_setnickname(gpointer rosterdata, const char *newname); const char *buddy_getnickname(gpointer rosterdata); +void buddy_settype(gpointer rosterdata, guint type); guint buddy_gettype(gpointer rosterdata); void buddy_setgroup(gpointer rosterdata, char *newgroupname); const char *buddy_getgroupname(gpointer rosterdata);