diff --git a/src/common/connection.py b/src/common/connection.py index 597bf5627..786c7528c 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -2037,10 +2037,12 @@ class Connection(CommonConnection, ConnectionHandlers): iq.addChild('unique', namespace=common.xmpp.NS_MUC_UNIQUE) def _on_response(resp): if not common.xmpp.isResultNode(resp): - self.dispatch('UNIQUE_ROOM_ID_UNSUPPORTED', (server, instance)) + gajim.nec.push_incoming_event(UniqueRoomIdNotSupportedEvent( + None, conn=self, instance=instance, server=server)) return - self.dispatch('UNIQUE_ROOM_ID_SUPPORTED', (server, instance, - resp.getTag('unique').getData())) + gajim.nec.push_incoming_event(UniqueRoomIdSupportedEvent(None, + conn=self, instance=instance, server=server, + room_id=resp.getTag('unique').getData())) self.connection.SendAndCallForResponse(iq, _on_response) def join_gc(self, nick, room_jid, password, change_nick=False): diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index b29d26a83..118b8bc7e 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1451,3 +1451,11 @@ class SSLErrorEvent(nec.NetworkIncomingEvent): class FingerprintErrorEvent(nec.NetworkIncomingEvent): name = 'fingerprint-error' base_network_events = [] + +class UniqueRoomIdSupportedEvent(nec.NetworkIncomingEvent): + name = 'unique-room-id-supported' + base_network_events = [] + +class UniqueRoomIdNotSupportedEvent(nec.NetworkIncomingEvent): + name = 'unique-room-id-not-supported' + base_network_events = [] diff --git a/src/dialogs.py b/src/dialogs.py index bb68055b7..71890c690 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -5151,12 +5151,21 @@ class TransformChatToMUC: path = self.store.get_path(iter_) self.guests_treeview.get_selection().select_path(path) + gajim.ged.register_event_handler('unique-room-id-supported', ged.GUI1, + self._nec_unique_room_id_supported) + gajim.ged.register_event_handler('unique-room-id-not-supported', + ged.GUI1, self._nec_unique_room_id_not_supported) + # show all self.window.show_all() self.xml.connect_signals(self) def on_chat_to_muc_window_destroy(self, widget): + gajim.ged.remove_event_handler('unique-room-id-supported', ged.GUI1, + self._nec_unique_room_id_supported) + gajim.ged.remove_event_handler('unique-room-id-not-supported', ged.GUI1, + self._nec_unique_room_id_not_supported) self.instances.remove(self) def on_chat_to_muc_window_key_press_event(self, widget, event): @@ -5169,7 +5178,9 @@ class TransformChatToMUC: return gajim.connections[self.account].check_unique_room_id_support(server, self) - def unique_room_id_supported(self, server, room_id): + def _nec_unique_room_id_supported(self, obj): + if obj.instance != self: + return guest_list = [] guests = self.guests_treeview.get_selection().get_selected_rows() for guest in guests[1]: @@ -5177,7 +5188,7 @@ class TransformChatToMUC: guest_list.append(self.store[iter_][2].decode('utf-8')) for guest in self.auto_jids: guest_list.append(guest) - room_jid = room_id + '@' + server + room_jid = obj.room_id + '@' + obj.server gajim.automatic_rooms[self.account][room_jid] = {} gajim.automatic_rooms[self.account][room_jid]['invities'] = guest_list gajim.automatic_rooms[self.account][room_jid]['continue_tag'] = True @@ -5188,10 +5199,12 @@ class TransformChatToMUC: def on_cancel_button_clicked(self, widget): self.window.destroy() - def unique_room_id_error(self, server): - self.unique_room_id_supported(server, - gajim.nicks[self.account].lower().replace(' ', '') + str(randrange( - 9999999))) + def _nec_unique_room_id_not_supported(self, obj): + if obj.instance != self: + return + obj.room_id = gajim.nicks[self.account].lower().replace(' ', '') + \ + str(randrange(9999999)) + self._nec_unique_room_id_supported(obj) class DataFormWindow(Dialog): def __init__(self, form, on_response_ok): diff --git a/src/gajim.py b/src/gajim.py index a405078b1..8ac395f77 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -403,6 +403,7 @@ if __name__ == '__main__': # Session Management support try: import gnome.ui + raise ImportError except ImportError: pass else: diff --git a/src/gui_interface.py b/src/gui_interface.py index ea8b7f482..3f71b612b 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -1400,19 +1400,6 @@ class Interface: dialogs.RosterItemExchangeWindow(obj.conn.name, obj.action, obj.exchange_items_list, obj.fjid) - def handle_event_unique_room_id_supported(self, account, data): - """ - Receive confirmation that unique_room_id are supported - """ - # ('UNIQUE_ROOM_ID_SUPPORTED', server, instance, room_id) - instance = data[1] - instance.unique_room_id_supported(data[0], data[2]) - - def handle_event_unique_room_id_unsupported(self, account, data): - # ('UNIQUE_ROOM_ID_UNSUPPORTED', server, instance) - instance = data[1] - instance.unique_room_id_error(data[0]) - def handle_event_ssl_error(self, obj): # ('SSL_ERROR', account, (text, errnum, cert, sha1_fingerprint)) account = obj.conn.name @@ -1640,10 +1627,6 @@ class Interface: 'PRIVACY_LIST_REMOVED': [self.handle_event_privacy_list_removed], 'ZC_NAME_CONFLICT': [self.handle_event_zc_name_conflict], 'PEP_CONFIG': [self.handle_event_pep_config], - 'UNIQUE_ROOM_ID_UNSUPPORTED': \ - [self.handle_event_unique_room_id_unsupported], - 'UNIQUE_ROOM_ID_SUPPORTED': \ - [self.handle_event_unique_room_id_supported], 'PASSWORD_REQUIRED': [self.handle_event_password_required], 'atom-entry-received': [self.handle_atom_entry], 'bad-gpg-passphrase': [self.handle_event_bad_gpg_passphrase],