Mercurial > hg
changeset 439:63562fd409a1
/info can show multiple resources
Add buddy_getresources() and teach /info about multiple resources.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Tue, 20 Sep 2005 21:27:21 +0200 |
parents | b44be19d6229 |
children | 264f40222872 |
files | mcabber/src/commands.c mcabber/src/roster.c mcabber/src/roster.h |
diffstat | 3 files changed, 48 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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)
--- 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);