diff --git a/src/common/connection.py b/src/common/connection.py index 59e6a354f..71b50f569 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -872,30 +872,17 @@ class Connection(CommonConnection, ConnectionHandlers): self._hostname, self.new_account_form, _on_register_result) return - try: - errnum = self.connection.Connection.ssl_errnum - except AttributeError: - errnum = -1 # we don't have an errnum - ssl_msg = '' - if errnum > 0: - ssl_msg = ssl_error.get(errnum, _('Unknown SSL error: %d') % errnum) - ssl_cert = '' - if hasattr(self.connection.Connection, 'ssl_cert_pem'): - ssl_cert = self.connection.Connection.ssl_cert_pem - ssl_fingerprint = '' - if hasattr(self.connection.Connection, 'ssl_fingerprint_sha1'): - ssl_fingerprint = \ - self.connection.Connection.ssl_fingerprint_sha1 - self.dispatch('NEW_ACC_CONNECTED', (conf, is_form, ssl_msg, - errnum, ssl_cert, ssl_fingerprint)) + gajim.nec.push_incoming_event(NewAccountConnectedEvent(None, + conn=self, config=conf, is_form=is_form)) self.connection.UnregisterDisconnectHandler( - self._on_new_account) + self._on_new_account) self.disconnect(on_purpose=True) return if not data[1]: # wrong answer self.dispatch('ERROR', (_('Invalid answer'), - _('Transport %(name)s answered wrongly to register request: ' - '%(error)s') % {'name': data[0], 'error': data[3]})) + _('Transport %(name)s answered wrongly to register ' + 'request: %(error)s') % {'name': data[0], + 'error': data[3]})) return is_form = data[2] conf = data[1] @@ -1810,8 +1797,9 @@ class Connection(CommonConnection, ConnectionHandlers): if len(self._connection_types) or len(self._hosts): # There are still other way to try to connect return - self.dispatch('NEW_ACC_NOT_CONNECTED', - (_('Could not connect to "%s"') % self._hostname)) + reason = _('Could not connect to "%s"') % self._hostname + gajim.nec.push_incoming_event(NewAccountNotConnectedEvent(None, + conn=self, reason=reason)) return self.on_connect_failure = None self.connection = con diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py index c5fd93c32..770ee542c 100644 --- a/src/common/connection_handlers_events.py +++ b/src/common/connection_handlers_events.py @@ -1240,4 +1240,31 @@ class AccountCreatedEvent(nec.NetworkIncomingEvent): class AccountNotCreatedEvent(nec.NetworkIncomingEvent): name = 'account-not-created' + base_network_events = [] + +class NewAccountConnectedEvent(nec.NetworkIncomingEvent): + name = 'new-account-connected' + base_network_events = [] + + def generate(self): + try: + self.errnum = self.conn.connection.Connection.ssl_errnum + except AttributeError: + self.errnum = -1 # we don't have an errnum + self.ssl_msg = '' + if self.errnum > 0: + from common.connection import ssl_error + self.ssl_msg = ssl_error.get(errnum, _('Unknown SSL error: %d') % \ + errnum) + self.ssl_cert = '' + if hasattr(self.conn.connection.Connection, 'ssl_cert_pem'): + self.ssl_cert = self.conn.connection.Connection.ssl_cert_pem + self.ssl_fingerprint = '' + if hasattr(self.conn.connection.Connection, 'ssl_fingerprint_sha1'): + self.ssl_fingerprint = \ + self.conn.connection.Connection.ssl_fingerprint_sha1 + return True + +class NewAccountNotConnectedEvent(nec.NetworkIncomingEvent): + name = 'new-account-not-connected' base_network_events = [] \ No newline at end of file diff --git a/src/config.py b/src/config.py index b2fffbe5b..88caee20b 100644 --- a/src/config.py +++ b/src/config.py @@ -3443,10 +3443,10 @@ class AccountCreationWizardWindow: self.notebook.set_current_page(0) self.xml.connect_signals(self) self.window.show_all() - gajim.ged.register_event_handler('NEW_ACC_CONNECTED', ged.CORE, - self.new_acc_connected) - gajim.ged.register_event_handler('NEW_ACC_NOT_CONNECTED', ged.CORE, - self.new_acc_not_connected) + gajim.ged.register_event_handler('new-account-connected', ged.GUI1, + self._nec_new_acc_connected) + gajim.ged.register_event_handler('new-account-not-connected', ged.GUI1, + self._nec_new_acc_not_connected) gajim.ged.register_event_handler('account-created', ged.GUI1, self._nec_acc_is_ok) gajim.ged.register_event_handler('account-not-created', ged.GUI1, @@ -3460,10 +3460,10 @@ class AccountCreationWizardWindow: del gajim.connections[self.account] if self.account in gajim.config.get_per('accounts'): gajim.config.del_per('accounts', self.account) - gajim.ged.remove_event_handler('NEW_ACC_CONNECTED', ged.CORE, - self.new_acc_connected) - gajim.ged.remove_event_handler('NEW_ACC_NOT_CONNECTED', ged.CORE, - self.new_acc_not_connected) + gajim.ged.remove_event_handler('new-account-connected', ged.GUI1, + self._nec_new_acc_connected) + gajim.ged.remove_event_handler('new-account-not-connected', ged.GUI1, + self._nec_new_acc_not_connected) gajim.ged.remove_event_handler('account-created', ged.GUI1, self._nec_acc_is_ok) gajim.ged.remove_event_handler('account-not-created', ged.GUI1, @@ -3706,41 +3706,42 @@ class AccountCreationWizardWindow: self.progressbar.pulse() return True # loop forever - def new_acc_connected(self, account, array): + def _nec_new_acc_connected(self, obj): """ Connection to server succeded, present the form to the user """ # We receive events from all accounts from GED - if account != self.account: + if obj.conn.name != self.account: return form, is_form, ssl_msg, ssl_err, ssl_cert, ssl_fingerprint = array if self.update_progressbar_timeout_id is not None: gobject.source_remove(self.update_progressbar_timeout_id) self.back_button.show() self.forward_button.show() - self.is_form = is_form - if is_form: - dataform = dataforms.ExtendForm(node = form) + self.is_form = obj.is_form + if obj.is_form: + dataform = dataforms.ExtendForm(node=obj.config) self.data_form_widget = dataforms_widget.DataFormWidget(dataform) else: - self.data_form_widget = FakeDataForm(form) + self.data_form_widget = FakeDataForm(obj.config) self.data_form_widget.show_all() self.xml.get_object('form_vbox').pack_start(self.data_form_widget) - self.ssl_fingerprint = ssl_fingerprint - self.ssl_cert = ssl_cert - if ssl_msg: + self.ssl_fingerprint = obj.ssl_fingerprint + self.ssl_cert = obj.ssl_cert + if obj.ssl_msg: # An SSL warning occured, show it - hostname = gajim.connections[self.account].new_account_info['hostname'] + hostname = gajim.connections[self.account].new_account_info[ + 'hostname'] self.xml.get_object('ssl_label').set_markup(_( 'Security Warning' '\n\nThe authenticity of the %(hostname)s SSL certificate could' ' be invalid.\nSSL Error: %(error)s\n' 'Do you still want to connect to this server?') % { - 'hostname': hostname, 'error': ssl_msg}) - if ssl_err in (18, 27): + 'hostname': hostname, 'error': obj.ssl_msg}) + if obj.ssl_err in (18, 27): text = _('Add this certificate to the list of trusted ' 'certificates.\nSHA1 fingerprint of the certificate:\n%s') \ - % ssl_fingerprint + % obj.ssl_fingerprint self.xml.get_object('ssl_checkbutton').set_label(text) else: self.xml.get_object('ssl_checkbutton').set_no_show_all(True) @@ -3749,12 +3750,12 @@ class AccountCreationWizardWindow: else: self.notebook.set_current_page(4) # show form page - def new_acc_not_connected(self, account, reason): + def _nec_new_acc_not_connected(self, obj): """ Account creation failed: connection to server failed """ # We receive events from all accounts from GED - if account != self.account: + if obj.conn.name != self.account: return if self.account not in gajim.connections: return @@ -3770,7 +3771,7 @@ class AccountCreationWizardWindow: img = self.xml.get_object('finish_image') img.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG) finish_text = '%s\n\n%s' % ( - _('An error occurred during account creation'), reason) + _('An error occurred during account creation'), obj.reason) self.finish_label.set_markup(finish_text) self.notebook.set_current_page(6) # show finish page