# HG changeset patch # User Mikael Berthe # Date 1127244441 -7200 # Node ID 63562fd409a145a6f5123444b5fb16002ec263b5 # Parent b44be19d62293f96d2cb41e9baec9d8782e0c0f6 /info can show multiple resources Add buddy_getresources() and teach /info about multiple resources. diff -r b44be19d6229 -r 63562fd409a1 mcabber/src/commands.c --- a/mcabber/src/commands.c Mon Sep 19 23:32:42 2005 +0200 +++ b/mcabber/src/commands.c Tue Sep 20 21:27:21 2005 +0200 @@ -616,9 +616,8 @@ static void do_info(char *arg) { gpointer bud; - const char *jid, *name, *st_msg; + const char *jid, *name; guint type; - enum imstatus status; char *buffer; if (!current_buddy) return; @@ -627,12 +626,11 @@ jid = buddy_getjid(bud); name = buddy_getname(bud); type = buddy_gettype(bud); - status = buddy_getstatus(bud, NULL); - st_msg = buddy_getstatusmsg(bud, NULL); buffer = g_new(char, 128); if (jid) { + GSList *resources; char *typestr = "unknown"; snprintf(buffer, 127, "jid: <%s>", jid); @@ -641,20 +639,34 @@ 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"; + if (type == ROSTER_TYPE_USER) typestr = "user"; else if (type == ROSTER_TYPE_AGENT) typestr = "agent"; - snprintf(buffer, 127, "Type: %s", typestr); scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO); + + resources = buddy_getresources(bud); + for ( ; resources ; resources = g_slist_next(resources) ) { + gchar rprio; + enum imstatus rstatus; + const char *rst_msg; + + rprio = buddy_getresourceprio(bud, resources->data); + rstatus = buddy_getstatus(bud, resources->data); + rst_msg = buddy_getstatusmsg(bud, resources->data); + + snprintf(buffer, 127, "Resource: [%c] (%d) %s", imstatus2char[rstatus], + rprio, (char*)resources->data); + scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO); + if (rst_msg) { + snprintf(buffer, 127, "Status message: %s", rst_msg); + scr_WriteIncomingMessage(jid, buffer, 0, HBB_PREFIX_INFO); + } + } } else { if (name) scr_LogPrint(LPRINT_NORMAL, "Name: %s", name); scr_LogPrint(LPRINT_NORMAL, "Type: %s", - ((type == ROSTER_TYPE_GROUP) ? "group" : "unknown")); + ((type == ROSTER_TYPE_GROUP) ? "group" : "unknown")); } g_free(buffer); diff -r b44be19d6229 -r 63562fd409a1 mcabber/src/roster.c --- a/mcabber/src/roster.c Mon Sep 19 23:32:42 2005 +0200 +++ b/mcabber/src/roster.c Tue Sep 20 21:27:21 2005 +0200 @@ -790,6 +790,29 @@ return NULL; } +gchar buddy_getresourceprio(gpointer rosterdata, const char *resname) +{ + roster *roster_usr = rosterdata; + res *p_res = get_resource(roster_usr, resname); + if (p_res) + return p_res->prio; + return 0; +} + +// buddy_getresources(roster_data) +// Return a singly-linked-list of resource names +// Note: the caller should free the list (and data) after use +GSList *buddy_getresources(gpointer rosterdata) +{ + roster *roster_usr = rosterdata; + GSList *reslist = NULL, *lp; + + for (lp = roster_usr->resource; lp; lp = g_slist_next(lp)) + reslist = g_slist_append(reslist, g_strdup(((res*)lp->data)->name)); + + return reslist; +} + // buddy_setflags() // Set one or several flags to value (TRUE/FALSE) void buddy_setflags(gpointer rosterdata, guint flags, guint value) diff -r b44be19d6229 -r 63562fd409a1 mcabber/src/roster.h --- a/mcabber/src/roster.h Mon Sep 19 23:32:42 2005 +0200 +++ b/mcabber/src/roster.h Tue Sep 20 21:27:21 2005 +0200 @@ -74,6 +74,8 @@ gpointer buddy_getgroup(gpointer rosterdata); enum imstatus buddy_getstatus(gpointer rosterdata, const char *resname); const char *buddy_getstatusmsg(gpointer rosterdata, const char *resname); +gchar buddy_getresourceprio(gpointer rosterdata, const char *resname); +GSList *buddy_getresources(gpointer rosterdata); void buddy_setflags(gpointer rosterdata, guint flags, guint value); guint buddy_getflags(gpointer rosterdata); GList *buddy_search(char *string);