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


Commits:
3d2cc2e6 by lovetox at 2021-02-28T17:55:38+01:00
Fix MUC rejoins

- - - - -


2 changed files:

- gajim/common/modules/contacts.py
- gajim/common/modules/muc.py


Changes:

=====================================
gajim/common/modules/contacts.py
=====================================
@@ -328,7 +328,7 @@ def update_avatar(self, *args):
         app.interface.avatar_storage.invalidate_cache(self._jid)
         self.notify('avatar-update')
 
-    def set_destroyed(self):
+    def set_not_joined(self):
         for contact in self._resources.values():
             contact.update_presence(UNKNOWN_MUC_PRESENCE)
 


=====================================
gajim/common/modules/muc.py
=====================================
@@ -251,7 +251,6 @@ def leave(self, room_jid, reason=None):
 
         self._remove_join_timeout(room_jid)
         self._remove_rejoin_timeout(room_jid)
-        self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
 
         self._con.get_module('Presence').send_presence(
             muc_data.occupant_jid,
@@ -259,6 +258,10 @@ def leave(self, room_jid, reason=None):
             status=reason,
             caps=False)
 
+        self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
+        room = self._get_contact(room_jid)
+        room.set_not_joined()
+
     def configure_room(self, room_jid):
         self._nbxmpp('MUC').request_config(room_jid,
                                            callback=self._on_room_config)
@@ -356,12 +359,17 @@ def change_nick(self, room_jid, new_nick):
             show=status,
             status=message)
 
-    def _on_error_presence(self, _con, _stanza, properties):
+    def _on_error_presence(self, _con, stanza, properties):
         room_jid = properties.jid.bare
         muc_data = self._manager.get(room_jid)
         if muc_data is None:
             return
 
+        if properties.jid.resource != muc_data.nick:
+            self._log.warning('Unknown error presence')
+            self._log.warning(stanza)
+            return
+
         room = self._get_contact(room_jid)
 
         if muc_data.state == MUCJoinedState.JOINING:
@@ -387,9 +395,9 @@ def _on_error_presence(self, _con, _stanza, properties):
             room.notify('room-creation-failed', properties)
 
         elif muc_data.state == MUCJoinedState.CAPTCHA_REQUEST:
-            room.notify('room-captcha-error', properties.error)
             self._manager.set_state(room_jid, MUCJoinedState.CAPTCHA_FAILED)
             self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
+            room.notify('room-captcha-error', properties.error)
 
         elif muc_data.state == MUCJoinedState.CAPTCHA_FAILED:
             self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
@@ -415,6 +423,7 @@ def _on_muc_user_presence(self, _con, stanza, properties):
             self._log.info('MUC destroyed: %s', room_jid)
             self._remove_join_timeout(room_jid)
             self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
+            room.set_not_joined()
             room.notify('destroyed', properties)
             return
 
@@ -466,6 +475,7 @@ def _on_muc_user_presence(self, _con, stanza, properties):
 
         if properties.is_muc_self_presence and properties.is_kicked:
             self._manager.set_state(room_jid, MUCJoinedState.NOT_JOINED)
+            room.set_not_joined()
             room.notify('kicked', properties)
             status_codes = properties.muc_status_codes or []
             if StatusCode.REMOVED_SERVICE_SHUTDOWN in status_codes:
@@ -786,6 +796,7 @@ def add(self, muc):
 
     def remove(self, muc):
         self._mucs.pop(muc.jid, None)
+        self._joined_users.pop(muc.jid, None)
 
     def get(self, room_jid):
         return self._mucs.get(room_jid)
@@ -796,6 +807,7 @@ def set_state(self, room_jid, state):
             if muc.state == state:
                 return
             self._log.info('Set MUC state: %s %s', room_jid, state)
+
             muc.state = state
             self.notify('state-changed',
                         state,
@@ -809,8 +821,12 @@ def get_mucs_with_state(self, states):
         return [muc for muc in self._mucs.values() if muc.state in states]
 
     def reset_state(self):
+        client = app.get_client(self._account)
         for muc in self._mucs.values():
             self.set_state(muc.jid, MUCJoinedState.NOT_JOINED)
+            self._joined_users.pop(muc.jid, None)
+            contact = client.get_module('Contacts').get_contact(muc.jid)
+            contact.set_not_joined()
 
     def __contains__(self, room_jid):
         return room_jid in self._mucs



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

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/3d2cc2e65ef8e4a6d4932f0e0032c9a8f7468635
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