use NEC to handle unique room id events
This commit is contained in:
		
							parent
							
								
									4fb9b442c8
								
							
						
					
					
						commit
						3f781f5382
					
				
					 5 changed files with 33 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 = []
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -403,6 +403,7 @@ if __name__ == '__main__':
 | 
			
		|||
        # Session Management support
 | 
			
		||||
        try:
 | 
			
		||||
            import gnome.ui
 | 
			
		||||
            raise ImportError
 | 
			
		||||
        except ImportError:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue