changeset 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 8dfdc6f1778e
children 882029ebd052
files mcabber/src/TODO mcabber/src/commands.c mcabber/src/histolog.c mcabber/src/histolog.h mcabber/src/hooks.c mcabber/src/hooks.h mcabber/src/jabglue.c mcabber/src/roster.c mcabber/src/roster.h
diffstat 9 files changed, 49 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/TODO	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/TODO	Sat Jun 04 12:47:13 2005 +0000
@@ -13,7 +13,7 @@
 * Get timestamp for offline messages
 * /connect /disconnect ?
 * Key bindings (ex: F5 <-> /group toggle)
-* Pending message not displayed if buddy outside Contact window,
+* Pending message flag is not displayed when buddy is outside Contact window,
   maybe we could show it someway (maybe just a flag?).
 * Show number of online contacts in folded groups
 * Buddy buffer in full width (handy for cut'n paste!)
--- a/mcabber/src/commands.c	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/commands.c	Sat Jun 04 12:47:13 2005 +0000
@@ -386,7 +386,7 @@
 void do_info(char *arg)
 {
   gpointer bud;
-  const char *jid, *name;
+  const char *jid, *name, *st_msg;
   guint type;
   enum imstatus status;
   char *buffer;
@@ -398,6 +398,7 @@
   name   = buddy_getname(bud);
   type   = buddy_gettype(bud);
   status = buddy_getstatus(bud);
+  st_msg = buddy_getstatusmsg(bud);
 
   buffer = g_new(char, 128);
 
@@ -410,6 +411,10 @@
       snprintf(buffer, 127, "Name: %s", name);
       scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
     }
+    if (st_msg) {
+      snprintf(buffer, 127, "Status message: %s", st_msg);
+      scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO);
+    }
 
     if (type == ROSTER_TYPE_USER) typestr = "user";
     else if (type == ROSTER_TYPE_AGENT) typestr = "agent";
--- a/mcabber/src/histolog.c	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/histolog.c	Sat Jun 04 12:47:13 2005 +0000
@@ -238,11 +238,11 @@
 }
 
 inline void hlog_write_status(const char *jid, time_t timestamp,
-        enum imstatus status)
+        enum imstatus status, const char *status_msg)
 {
   // #1 XXX Check status value?
   // #2 We could add a user-readable comment
   write_histo_line(jid, timestamp, 'S', toupper(imstatus2char[status]),
-          NULL);
+          status_msg);
 }
 
--- a/mcabber/src/histolog.h	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/histolog.h	Sat Jun 04 12:47:13 2005 +0000
@@ -10,7 +10,7 @@
 inline void hlog_write_message(const char *jid, time_t timestamp, int sent,
         const char *msg);
 inline void hlog_write_status(const char *jid, time_t timestamp,
-        enum imstatus status);
+        enum imstatus status, const char *status_msg);
 
 #endif /* __HISTOLOG_H__ */
 
--- a/mcabber/src/hooks.c	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/hooks.c	Sat Jun 04 12:47:13 2005 +0000
@@ -63,14 +63,14 @@
 }
 
 inline void hk_statuschange(const char *jid, time_t timestamp, 
-        enum imstatus status)
+        enum imstatus status, const char *status_msg)
 {
   scr_LogPrint("Buddy status has changed: [%c>%c] <%s>",
           imstatus2char[roster_getstatus(jid)], imstatus2char[status], jid);
-  roster_setstatus(jid, status);
+  roster_setstatus(jid, status, status_msg);
   buddylist_build();
   scr_DrawRoster();
-  hlog_write_status(jid, 0, status);
+  hlog_write_status(jid, 0, status, status_msg);
 }
 
 inline void hk_mystatuschange(time_t timestamp,
--- a/mcabber/src/hooks.h	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/hooks.h	Sat Jun 04 12:47:13 2005 +0000
@@ -8,7 +8,7 @@
 inline void hk_message_in(const char *jid, time_t timestamp, const char *msg);
 inline void hk_message_out(const char *jid, time_t timestamp, const char *msg);
 inline void hk_statuschange(const char *jid, time_t timestamp, 
-        enum imstatus status);
+        enum imstatus status, char const *status_msg);
 inline void hk_mystatuschange(time_t timestamp,
         enum imstatus old_status, enum imstatus new_status);
 
--- a/mcabber/src/jabglue.c	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/jabglue.c	Sat Jun 04 12:47:13 2005 +0000
@@ -813,15 +813,15 @@
           ust = offline;
         }
 
+        if ((x = xmlnode_get_tag(packet->x, "status")) != NULL)
+          p = xmlnode_get_data(x);
+        else
+          p = NULL;
+
         r = jidtodisp(from);
         if (ust != roster_getstatus(r))
-          hk_statuschange(r, 0, ust);
+          hk_statuschange(r, 0, ust, p);
         g_free(r);
-        /*
-        if (x = xmlnode_get_tag(packet->x, "status"))
-          if (p = xmlnode_get_data(x))
-            scr_LogPrint("Away msg: %s", p);
-        */
         break;
 
     case JPACKET_S10N:
--- 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)
--- a/mcabber/src/roster.h	Sat Jun 04 11:44:55 2005 +0000
+++ b/mcabber/src/roster.h	Sat Jun 04 12:47:13 2005 +0000
@@ -35,7 +35,8 @@
         guint type);
 void    roster_del_user(const char *jid);
 void    roster_free(void);
-void    roster_setstatus(const char *jid, enum imstatus bstat);
+void    roster_setstatus(const char *jid, enum imstatus bstat,
+        const char *status_msg);
 void    roster_setflags(const char *jid, guint flags, guint value);
 void    roster_msg_setflag(const char *jid, guint value);
 void    roster_settype(const char *jid, guint type);
@@ -56,6 +57,7 @@
 const char *buddy_getgroupname(gpointer rosterdata);
 gpointer buddy_getgroup(gpointer rosterdata);
 enum imstatus buddy_getstatus(gpointer rosterdata);
+const char *buddy_getstatusmsg(gpointer rosterdata);
 void    buddy_setflags(gpointer rosterdata, guint flags, guint value);
 guint   buddy_getflags(gpointer rosterdata);