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