Mercurial > hg
changeset 1504:9fafea381eb8
Show the number of unfiltered contacts in folded groups
author | franky |
---|---|
date | Sun, 31 Aug 2008 11:29:04 +0200 |
parents | c74cfe7fd848 |
children | 78137e986528 |
files | mcabber/TODO mcabber/src/roster.c mcabber/src/roster.h mcabber/src/screen.c |
diffstat | 4 files changed, 23 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mcabber/TODO Sat Aug 23 21:01:14 2008 +0200 +++ b/mcabber/TODO Sun Aug 31 11:29:04 2008 +0200 @@ -11,7 +11,6 @@ * Use new Entity Time specs (XEP-0202) if possible in /request time. * Enable /roster search for offline (hidden) buddies (hidden groups, etc.) -* Show number of online contacts in folded groups * Publish personal information * MUC: advanced settings for room creation * MUC: display roles of room members
--- a/mcabber/src/roster.c Sat Aug 23 21:01:14 2008 +0200 +++ b/mcabber/src/roster.c Sun Aug 31 11:29:04 2008 +0200 @@ -813,6 +813,11 @@ return (display_filter != DFILTER_ALL); } +int buddylist_is_status_filtered(enum imstatus status) +{ + return display_filter & (1 << status); +} + void buddylist_set_filter(guchar filter) { display_filter = filter; @@ -869,7 +874,8 @@ // - group isn't hidden (shrunk) // - this is the current_buddy if (roster_usrelt == roster_current_buddy || - display_filter & 1<<buddy_getstatus((gpointer)roster_usrelt, NULL) || + buddylist_is_status_filtered(buddy_getstatus((gpointer)roster_usrelt, + NULL)) || (buddy_getflags((gpointer)roster_usrelt) & (ROSTER_FLAG_LOCK | ROSTER_FLAG_USRLOCK | ROSTER_FLAG_MSG))) { // This user should be added. Maybe the group hasn't been added yet?
--- a/mcabber/src/roster.h Sat Aug 23 21:01:14 2008 +0200 +++ b/mcabber/src/roster.h Sun Aug 31 11:29:04 2008 +0200 @@ -178,6 +178,7 @@ void buddy_hide_group(gpointer rosterdata, int hide); void buddylist_set_hide_offline_buddies(int hide); int buddylist_isset_filter(void); +int buddylist_is_status_filtered(enum imstatus status); void buddylist_set_filter(guchar); guchar buddylist_get_filter(void); const char *buddy_getjid(gpointer rosterdata);
--- a/mcabber/src/screen.c Sat Aug 23 21:01:14 2008 +0200 +++ b/mcabber/src/screen.c Sun Aug 31 11:29:04 2008 +0200 @@ -1726,6 +1726,13 @@ } } +void increment_if_buddy_not_filtered(gpointer rosterdata, void *param) +{ + int *p = param; + if (buddylist_is_status_filtered(buddy_getstatus(rosterdata, NULL))) + *p=*p+1; +} + // scr_DrawRoster() // Display the buddylist (not really the roster) on the screen void scr_DrawRoster(void) @@ -1889,12 +1896,15 @@ name[0] = 0; if (isgrp) { - char *sep; - if (ishid) - sep = "+++"; + if (ishid){ + int group_count = 0; + foreach_group_member(BUDDATA(buddy), increment_if_buddy_not_filtered, + &group_count); + snprintf(rline, 4*Roster_Width, " %c+++ %s (%i)", pending, name, + group_count); + } else - sep = "---"; - snprintf(rline, 4*Roster_Width, " %c%s %s", pending, sep, name); + snprintf(rline, 4*Roster_Width, " %c--- %s", pending, name); } else if (isspe) { snprintf(rline, 4*Roster_Width, " %c%s", pending, name); } else {