[/trunk] Changeset 233 by mikael
* /info now displays the current status message
--- 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);