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 {