diff --git a/src/gajim.py b/src/gajim.py index 928045293..41a29ce65 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -1235,6 +1235,7 @@ class Interface: fjid = room_jid + '/' + nick show = array[1] status = array[2] + conn = gajim.connections[account] # Get the window and control for the updated status, this may be a # PrivateChatControl @@ -1267,6 +1268,13 @@ class Interface: c = gajim.contacts.contact_from_gc_contact(gc_c) ctrl.gc_contact = gc_c ctrl.contact = c + if ctrl.session: + # stop e2e + if ctrl.session.enable_encryption: + thread_id = ctrl.session.thread_id + ctrl.session.terminate_e2e() + conn.delete_session(fjid, thread_id) + ctrl.no_autonegotiation = False ctrl.draw_banner() old_jid = room_jid + '/' + nick new_jid = room_jid + '/' + new_nick diff --git a/src/groupchat_control.py b/src/groupchat_control.py index d23010687..99fdb6ab9 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -170,6 +170,15 @@ class PrivateChatControl(ChatControl): def update_contact(self): self.contact = gajim.contacts.contact_from_gc_contact(self.gc_contact) + def begin_e2e_negotiation(self): + self.no_autonegotiation = True + + if not self.session: + fjid = self.gc_contact.get_full_jid() + new_sess = gajim.connections[self.account].make_new_session(fjid, type_=self.type_id) + self.set_session(new_sess) + + self.session.negotiate_e2e(False) class GroupchatControl(ChatControlBase): TYPE_ID = message_control.TYPE_GC @@ -1174,6 +1183,20 @@ class GroupchatControl(ChatControlBase): self.nick = new_nick self.new_nick = '' s = _('You are now known as %s') % new_nick + # Stop all E2E sessions + nick_list = gajim.contacts.get_nick_list(self.account, + self.room_jid) + for nick in nick_list: + fjid = self.room_jid + '/' + nick + ctrl = gajim.interface.msg_win_mgr.get_control(fjid, + self.account) + if ctrl and ctrl.session and \ + ctrl.session.enable_encryption: + thread_id = ctrl.session.thread_id + ctrl.session.terminate_e2e() + gajim.connections[self.account].delete_session(fjid, + thread_id) + ctrl.no_autonegotiation = False else: s = _('%(nick)s is now known as %(new_nick)s') % { 'nick': nick, 'new_nick': new_nick} @@ -1844,6 +1867,13 @@ class GroupchatControl(ChatControlBase): contact.status = '' ctrl.update_ui() ctrl.parent_win.redraw_tab(ctrl) + for sess in gajim.connections[self.account].get_sessions(fjid): + if sess.control: + sess.control.no_autonegotiation = False + if sess.enable_encryption: + sess.terminate_e2e() + gajim.connections[self.account].delete_session(fjid, + sess.thread_id) # They can already be removed by the destroy function if self.room_jid in gajim.contacts.get_gc_list(self.account): gajim.contacts.remove_room(self.account, self.room_jid)