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


Commits:
ef139427 by lovetox at 2021-03-06T14:26:29+01:00
Add high performance option for big rosters

- - - - -


2 changed files:

- gajim/common/modules/roster.py
- gajim/gtk/roster.py


Changes:

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


=====================================
gajim/gtk/roster.py
=====================================
@@ -92,8 +92,14 @@ def __init__(self, account):
             ('roster-push', ged.GUI2, self._on_roster_push),
         ])
 
+        roster_size = self._client.get_module('Roster').get_size()
+        self._high_performance = roster_size > 1000
+
         self._modelfilter = self._store.filter_new()
-        self._modelfilter.set_visible_column(Column.VISIBLE)
+        if self._high_performance:
+            self._modelfilter.set_visible_func(self._visible_func)
+        else:
+            self._modelfilter.set_visible_column(Column.VISIBLE)
         self._filter_enabled = False
         self._filter_string = ''
 
@@ -292,10 +298,19 @@ def _show_contact_menu(self, jid, treeview, event):
         popover.popup()
 
     def set_search_string(self, text):
-        self._filter_string = text
+        self._filter_string = text.lower()
         self._filter_enabled = bool(text)
         self._refilter()
 
+    def _visible_func(self, model, iter_, *_data):
+        if not self._filter_enabled:
+            return True
+
+        if not model[iter_][Column.IS_CONTACT]:
+            return True
+
+        return self._filter_string in model[iter_][Column.TEXT].lower()
+
     def _get_contact_visible(self, contact):
         if self._filter_enabled:
             return self._filter_string in contact.name.lower()
@@ -452,6 +467,11 @@ def _draw_group(self, group_name):
         self._store[group_iter][Column.TEXT] = group_name
 
     def _refilter(self):
+        if self._high_performance:
+            self._modelfilter.refilter()
+            self._roster.expand_all()
+            return
+
         for group in self._store:
             group_is_visible = False
             for child in group.iterchildren():



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/ef13942716966b5f0f08fffef1b06fa557059901

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/ef13942716966b5f0f08fffef1b06fa557059901
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to