From b804ebd81b4fea3e141c995c6f1cf69472f6d356 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Tue, 6 Dec 2011 19:11:34 +0100
Subject: [PATCH] improve search filter in roster: hide groups that have no
 contacts, make it search for transports and groupchats. Fixes #7060

---
 src/roster_window.py | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/roster_window.py b/src/roster_window.py
index 31e611dfb7..6b295f19e6 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -1515,6 +1515,8 @@ class RosterWindow:
         return False
 
     def contact_is_visible(self, contact, account):
+        if self.rfilter_enabled:
+            return self.rfilter_string in contact.get_shown_name().lower()
         if self.contact_has_pending_roster_events(contact, account):
             return True
 
@@ -1556,9 +1558,17 @@ class RosterWindow:
                     accounts = [account]
                 for _acc in accounts:
                     for contact in gajim.contacts.iter_contacts(_acc):
-                        if group in contact.get_shown_groups() and \
-                        self.contact_has_pending_roster_events(contact, _acc):
-                            return True
+                        if group in contact.get_shown_groups():
+                            if self.rfilter_enabled:
+                                if self.rfilter_string in \
+                                contact.get_shown_name().lower():
+                                    return True
+                            elif self.contact_has_pending_roster_events(contact,
+                            _acc):
+                                return True
+                    if self.rfilter_enabled:
+                        # No transport has been found
+                        return False
                 return gajim.config.get('show_transports_group') and \
                     (gajim.account_is_connected(account) or \
                     gajim.config.get('showoffline'))
@@ -1610,12 +1620,16 @@ class RosterWindow:
                     account, jid)
                 return self.contact_is_visible(contact, account)
         if type_ == 'agent':
+            if self.rfilter_enabled:
+                return self.rfilter_string in model[titer][C_NAME].lower()
             contact = gajim.contacts.get_contact_with_highest_priority(account,
                 jid)
             return self.contact_has_pending_roster_events(contact, account) or \
                 (gajim.config.get('show_transports_group') and \
                 (gajim.account_is_connected(account) or \
                 gajim.config.get('showoffline')))
+        if type_ == 'groupchat' and self.rfilter_enabled:
+            return self.rfilter_string in model[titer][C_NAME].lower()
         return True
 
     def _compareIters(self, model, iter1, iter2, data=None):
-- 
GitLab