changeset 489:21ab22a60bcb

Auto-convert a roster item to "room" type when receiving a groupchat message
author Mikael Berthe <mikael@lilotux.net>
date Fri, 07 Oct 2005 20:12:11 +0200
parents 9e8519078e00
children af6e31e32d9e
files mcabber/src/hooks.c mcabber/src/jabglue.c mcabber/src/roster.c mcabber/src/roster.h
diffstat 4 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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");
--- 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;
--- 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);