# HG changeset patch # User mikael # Date 1117889233 0 # Node ID 73f6ce668ba8f4fd827470402d92b362dcad7ff5 # Parent 8dfdc6f1778e57f4432c4323cad3c7fcf1285c71 [/trunk] Changeset 233 by mikael * /info now displays the current status message diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/TODO --- 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!) diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/commands.c --- 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"; diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/histolog.c --- 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); } diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/histolog.h --- 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__ */ diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/hooks.c --- 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, diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/hooks.h --- 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); diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/jabglue.c --- 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: diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/roster.c --- 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) diff -r 8dfdc6f1778e -r 73f6ce668ba8 mcabber/src/roster.h --- 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);