| ... |
... |
@@ -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():
|