diff mcabber/src/roster.c @ 221:73f6ce668ba8

[/trunk] Changeset 233 by mikael * /info now displays the current status message
author mikael
date Sat, 04 Jun 2005 12:47:13 +0000
parents 9484ba81ec53
children d5ae42cbe1fa
line wrap: on
line diff
--- a/mcabber/src/roster.c	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/roster.c	Sat Jun 04 12:47:13 2005 +0000
@@ -29,6 +29,7 @@
 typedef struct {
   const gchar *name;
   const gchar *jid;
+  const gchar *status_msg;
   guint type;
   enum imstatus status;
   guint flags;
@@ -176,10 +177,9 @@
     return;
   // Let's free memory (jid, name)
   roster_usr = (roster*)sl_user->data;
-  if (roster_usr->jid)
-    g_free((gchar*)roster_usr->jid);
-  if (roster_usr->name)
-    g_free((gchar*)roster_usr->name);
+  if (roster_usr->jid)        g_free((gchar*)roster_usr->jid);
+  if (roster_usr->name)       g_free((gchar*)roster_usr->name);
+  if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg);
   g_free(roster_usr);
 
   // That's a little complex, we need to dereference twice
@@ -208,10 +208,9 @@
     while (sl_usr) {
       roster *roster_usr = (roster*)sl_usr->data;
       // Free name and jid
-      if (roster_usr->jid)
-        g_free((gchar*)roster_usr->jid);
-      if (roster_usr->name)
-        g_free((gchar*)roster_usr->name);
+      if (roster_usr->jid)        g_free((gchar*)roster_usr->jid);
+      if (roster_usr->name)       g_free((gchar*)roster_usr->name);
+      if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg);
       g_free(roster_usr);
       sl_usr = g_slist_next(sl_usr);
     }
@@ -219,10 +218,8 @@
     if (roster_grp->list)
       g_slist_free(roster_grp->list);
     // Free group's name and jid
-    if (roster_grp->jid)
-      g_free((gchar*)roster_grp->jid);
-    if (roster_grp->name)
-      g_free((gchar*)roster_grp->name);
+    if (roster_grp->jid)  g_free((gchar*)roster_grp->jid);
+    if (roster_grp->name) g_free((gchar*)roster_grp->name);
     g_free(roster_grp);
     sl_grp = g_slist_next(sl_grp);
   }
@@ -236,7 +233,8 @@
   }
 }
 
-void roster_setstatus(const char *jid, enum imstatus bstat)
+void roster_setstatus(const char *jid, enum imstatus bstat,
+        const char *status_msg)
 {
   GSList *sl_user;
   roster *roster_usr;
@@ -248,6 +246,12 @@
 
   roster_usr = (roster*)sl_user->data;
   roster_usr->status = bstat;
+  if (roster_usr->status_msg) {
+    g_free((gchar*)roster_usr->status_msg);
+    roster_usr->status_msg = NULL;
+  }
+  if (status_msg)
+    roster_usr->status_msg = g_strdup(status_msg);
 }
 
 //  roster_setflags()
@@ -506,8 +510,9 @@
   roster_clone->flags  = roster_usr->flags;
 
   // Free old buddy
-  if (roster_usr->jid)  g_free((gchar*)roster_usr->jid);
-  if (roster_usr->name) g_free((gchar*)roster_usr->name);
+  if (roster_usr->jid)        g_free((gchar*)roster_usr->jid);
+  if (roster_usr->name)       g_free((gchar*)roster_usr->name);
+  if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg);
   g_free(roster_usr);
 
   // If new new group is folded, the curren_buddy will be lost, and the
@@ -589,6 +594,12 @@
   return roster_usr->status;
 }
 
+const char *buddy_getstatusmsg(gpointer rosterdata)
+{
+  roster *roster_usr = rosterdata;
+  return roster_usr->status_msg;
+}
+
 //  buddy_setflags()
 // Set one or several flags to value (TRUE/FALSE)
 void buddy_setflags(gpointer rosterdata, guint flags, guint value)