Philipp Hörist pushed to branch mainwindow at gajim / gajim

Commits:

2 changed files:

Changes:

  • gajim/common/modules/roster.py
    ... ... @@ -62,6 +62,9 @@ def load_roster(self):
    62 62
         def _store_roster(self):
    
    63 63
             app.storage.cache.store_roster(self._account, self._roster)
    
    64 64
     
    
    65
    +    def get_size(self):
    
    66
    +        return len(self._roster)
    
    67
    +
    
    65 68
         def request_roster(self):
    
    66 69
             version = app.settings.get_account_setting(self._account,
    
    67 70
                                                        'roster_version')
    

  • gajim/gtk/roster.py
    ... ... @@ -92,8 +92,14 @@ def __init__(self, account):
    92 92
                 ('roster-push', ged.GUI2, self._on_roster_push),
    
    93 93
             ])
    
    94 94
     
    
    95
    +        roster_size = self._client.get_module('Roster').get_size()
    
    96
    +        self._high_performance = roster_size > 1000
    
    97
    +
    
    95 98
             self._modelfilter = self._store.filter_new()
    
    96
    -        self._modelfilter.set_visible_column(Column.VISIBLE)
    
    99
    +        if self._high_performance:
    
    100
    +            self._modelfilter.set_visible_func(self._visible_func)
    
    101
    +        else:
    
    102
    +            self._modelfilter.set_visible_column(Column.VISIBLE)
    
    97 103
             self._filter_enabled = False
    
    98 104
             self._filter_string = ''
    
    99 105
     
    
    ... ... @@ -292,10 +298,19 @@ def _show_contact_menu(self, jid, treeview, event):
    292 298
             popover.popup()
    
    293 299
     
    
    294 300
         def set_search_string(self, text):
    
    295
    -        self._filter_string = text
    
    301
    +        self._filter_string = text.lower()
    
    296 302
             self._filter_enabled = bool(text)
    
    297 303
             self._refilter()
    
    298 304
     
    
    305
    +    def _visible_func(self, model, iter_, *_data):
    
    306
    +        if not self._filter_enabled:
    
    307
    +            return True
    
    308
    +
    
    309
    +        if not model[iter_][Column.IS_CONTACT]:
    
    310
    +            return True
    
    311
    +
    
    312
    +        return self._filter_string in model[iter_][Column.TEXT].lower()
    
    313
    +
    
    299 314
         def _get_contact_visible(self, contact):
    
    300 315
             if self._filter_enabled:
    
    301 316
                 return self._filter_string in contact.name.lower()
    
    ... ... @@ -452,6 +467,11 @@ def _draw_group(self, group_name):
    452 467
             self._store[group_iter][Column.TEXT] = group_name
    
    453 468
     
    
    454 469
         def _refilter(self):
    
    470
    +        if self._high_performance:
    
    471
    +            self._modelfilter.refilter()
    
    472
    +            self._roster.expand_all()
    
    473
    +            return
    
    474
    +
    
    455 475
             for group in self._store:
    
    456 476
                 group_is_visible = False
    
    457 477
                 for child in group.iterchildren():