diff options
author | defanor <defanor@uberspace.net> | 2020-11-25 22:26:11 +0300 |
---|---|---|
committer | defanor <defanor@uberspace.net> | 2020-11-25 22:26:11 +0300 |
commit | 2bf30b026aa22038e079043ed2dcdfc5aab4c725 (patch) | |
tree | c1514a53dedb8e8dc4ba1ec8996bc5f016a9f35b | |
parent | 8bdb022b36c608deacd2a655207709e6ee3bf156 (diff) |
Show presences in roster listing
-rw-r--r-- | src/rexmpp_console.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rexmpp_console.c b/src/rexmpp_console.c index 2c9b19a..7dbaf61 100644 --- a/src/rexmpp_console.c +++ b/src/rexmpp_console.c @@ -319,8 +319,26 @@ void rexmpp_console_feed (rexmpp_t *s, char *str, ssize_t str_len) { char *item_jid = xmlGetProp(item, "jid"); char *item_ask = xmlGetProp(item, "ask"); char *item_subscription = xmlGetProp(item, "subscription"); - rexmpp_console_printf(s, "%s: subscription = %s, ask = %s\n", - item_jid, item_subscription, item_ask); + char *item_presence = "unavailable"; + if (s->track_roster_presence) { + for (presence = s->roster_presence; + presence != NULL; + presence = xmlNextElementSibling(presence)) { + char *presence_from = xmlGetProp(presence, "from"); + if (presence_from != NULL) { + rexmpp_jid_parse(presence_from, &jid); + if (! strcmp(jid.bare, item_jid)) { + item_presence = "available"; + } + free(presence_from); + } + } + } + rexmpp_console_printf(s, + "%s: subscription = %s, ask = %s, " + "presence = %s\n", + item_jid, item_subscription, item_ask, + item_presence); if (item_jid != NULL) { free(item_jid); } |