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


Commits:
6290b885 by Philipp Hörist at 2023-11-01T00:28:56+01:00
refactor: GroupchatRoster: Make it more resilient

- Treat signal/event callbacks as public methods and check if contact is set
- Make enable_sort() private
- Disconnect settings signal on clear()

- - - - -


1 changed file:

- gajim/gtk/groupchat_roster.py


Changes:

=====================================
gajim/gtk/groupchat_roster.py
=====================================
@@ -106,9 +106,6 @@ def __init__(self) -> None:
 
         self._ui.connect_signals(self)
 
-        app.settings.connect_signal(
-            'hide_groupchat_occupants_list', self._hide_roster)
-
         self.register_events([
             ('theme-update', ged.GUI2, self._on_theme_update),
         ])
@@ -129,6 +126,9 @@ def _hide_roster(self, hide_roster: bool, *args: Any) -> 
None:
         self.set_visible(not hide_roster)
 
     def _on_reveal(self, revealer: Gtk.Revealer, param: Any) -> None:
+        if self._contact is not None:
+            return
+
         if revealer.get_reveal_child():
             self._load_roster()
         else:
@@ -140,12 +140,12 @@ def clear(self) -> None:
 
         log.info('Clear')
         self._unload_roster()
+        app.settings.disconnect_signals(self)
         self._contact.disconnect_signal(self, 'state-changed')
         self._contact = None
 
     def switch_contact(self, contact: types.ChatContactT) -> None:
-        if self._contact is not None:
-            self.clear()
+        self.clear()
 
         is_groupchat = isinstance(contact, GroupchatContact)
         hide_roster = app.settings.get('hide_groupchat_occupants_list')
@@ -156,6 +156,8 @@ def switch_contact(self, contact: types.ChatContactT) -> 
None:
         log.info('Switch to %s (%s)', contact.jid, contact.account)
 
         contact.connect('state-changed', self._on_muc_state_changed)
+        app.settings.connect_signal(
+            'hide_groupchat_occupants_list', self._hide_roster)
 
         self._contact = contact
 
@@ -515,7 +517,7 @@ def _tree_compare_iters(self,
         group2_index = AffiliationRoleSortOrder[group2]
         return -1 if group1_index < group2_index else 1
 
-    def enable_sort(self, enable: bool) -> None:
+    def _enable_sort(self, enable: bool) -> None:
         column = Gtk.TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID
         if enable:
             column = Column.TEXT
@@ -526,10 +528,8 @@ def _load_roster(self) -> None:
         if not self.get_reveal_child():
             return
 
-        if self._contact is None:
-            return
-
         log.info('Load Roster')
+        assert self._contact is not None
         self._contact.multi_connect({
             'user-affiliation-changed': self._update_contact,
             'user-avatar-update': self._on_user_avatar_update,
@@ -543,7 +543,7 @@ def _load_roster(self) -> None:
         for participant in self._contact.get_participants():
             self._add_contact(participant)
 
-        self.enable_sort(True)
+        self._enable_sort(True)
         self._roster.set_model(self._modelfilter)
 
         self._ui.search_entry.set_text('')
@@ -559,14 +559,14 @@ def _unload_roster(self) -> None:
 
         self._roster.set_model(None)
         self._store.clear()
-        self.enable_sort(False)
+        self._enable_sort(False)
 
         self._contact_refs = {}
         self._group_refs = {}
 
     def invalidate_sort(self) -> None:
-        self.enable_sort(False)
-        self.enable_sort(True)
+        self._enable_sort(False)
+        self._enable_sort(True)
 
     def _redraw(self) -> None:
         self._roster.set_model(None)
@@ -654,4 +654,6 @@ def _get_total_user_count(self) -> int:
         return count
 
     def _on_theme_update(self, _event: ApplicationEvent) -> None:
+        if self._contact is None:
+            return
         self._redraw()



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

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


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to