changeset 141:6533a231a65e

[/trunk] Changeset 153 by mikael * We now rebuild the buddy list when receiving a message from an offline/invisible buddy.
author mikael
date Thu, 28 Apr 2005 20:34:40 +0000
parents 3b480b73df19
children bb6fe91589b9
files mcabber/src/TODO mcabber/src/hooks.c mcabber/src/roster.c mcabber/src/roster.h
diffstat 4 files changed, 22 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/TODO	Thu Apr 28 20:11:31 2005 +0000
+++ b/mcabber/src/TODO	Thu Apr 28 20:34:40 2005 +0000
@@ -1,8 +1,6 @@
 
 BUGS:
 
-* We should rebuild the buddy list when receiving a message from an offline
-  buddy (or invisible/just hidden).
 * Presence notification is always accepted.
 * Messages in hidden (shrunk) groups are not visible.
   Maybe we should create "*_msg_[gs]etflag()" functions, which
--- a/mcabber/src/hooks.c	Thu Apr 28 20:11:31 2005 +0000
+++ b/mcabber/src/hooks.c	Thu Apr 28 20:34:40 2005 +0000
@@ -30,10 +30,21 @@
 inline void hk_message_in(const char *jid, time_t timestamp, const char *msg)
 {
   char *buffer = utf8_decode(msg);
-  // XXX Maybe filter out special chars?
+  int new_guy = FALSE;
+
+  // If this user isn't in the roster, we add it
+  if (!roster_exists(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT)) {
+    roster_add_user(jid, NULL, NULL, ROSTER_TYPE_USER);
+    new_guy = TRUE;
+  }
+
   scr_WriteIncomingMessage(jid, buffer);
   hlog_write_message(jid, timestamp, FALSE, buffer);
   free(buffer);
+  if (new_guy) {
+    buddylist_build();
+    update_roster = TRUE;
+  }
 }
 
 inline void hk_message_out(const char *jid, time_t timestamp, const char *msg)
--- a/mcabber/src/roster.c	Thu Apr 28 20:11:31 2005 +0000
+++ b/mcabber/src/roster.c	Thu Apr 28 20:34:40 2005 +0000
@@ -264,6 +264,14 @@
   return roster_usr->type;
 }
 
+inline guint roster_exists(const char *jidname, enum findwhat type,
+        guint roster_type)
+{
+  if (roster_find(jidname, type, roster_type))
+    return TRUE;
+  return FALSE;
+}
+
 // char *roster_getgroup(...)   / Or *GSList?  Which use??
 // ... setgroup(char*) ??
 // guchar roster_getflags(...)
--- a/mcabber/src/roster.h	Thu Apr 28 20:11:31 2005 +0000
+++ b/mcabber/src/roster.h	Thu Apr 28 20:34:40 2005 +0000
@@ -43,6 +43,8 @@
 void    roster_settype(const char *jid, guint type);
 enum imstatus roster_getstatus(const char *jid);
 guint   roster_gettype(const char *jid);
+inline guint roster_exists(const char *jidname, enum findwhat type,
+        guint roster_type);
 
 void buddylist_set_hide_offline_buddies(int hide);
 inline int buddylist_get_hide_offline_buddies(void);