diff --git a/gajim/gtk/account_wizard.py b/gajim/gtk/account_wizard.py index 5afe870f38372a9dabdbcebe03f60ddcc7953d76..78de4c8a887f37a693bf51cff7994c1912f0703e 100644 --- a/gajim/gtk/account_wizard.py +++ b/gajim/gtk/account_wizard.py @@ -27,7 +27,9 @@ from nbxmpp.const import StreamError from nbxmpp.const import ConnectionProtocol from nbxmpp.const import ConnectionType -from nbxmpp.util import is_error_result +from nbxmpp.errors import StanzaError +from nbxmpp.errors import MalformedStanzaError +from nbxmpp.errors import RegisterStanzaError from gajim.common import app from gajim.common import configpaths @@ -46,7 +48,6 @@ from gajim.gtk.dataform import DataFormWidget from gajim.gtk.util import get_builder from gajim.gtk.util import open_window -from gajim.gtk.util import ensure_not_destroyed log = logging.getLogger('gajim.gtk.account_wizard') @@ -425,12 +426,13 @@ def _generate_account_name(domain): i += 1 return domain - @ensure_not_destroyed - def _on_register_form(self, result): - if is_error_result(result): + def _on_register_form(self, task): + try: + result = task.finish() + except (StanzaError, MalformedStanzaError) as error: self._show_error_page(_('Error'), _('Error'), - result.get_text()) + error.get_text()) self._disconnect() return @@ -460,14 +462,36 @@ def _submit_form(self): form = self.get_page('form').get_submit_form() self._client.get_module('Register').submit_register_form( - None, form, callback=self._on_register_result) - @ensure_not_destroyed - def _on_register_result(self, result): - if is_error_result(result): - self._on_register_error(result) + def _on_register_result(self, task): + try: + task.finish() + except RegisterStanzaError as error: + self._set_error_text(error) + if error.type != 'modify': + self.get_page('form').remove_form() + self._disconnect() + return + + register_data = error.get_data() + form = register_data.form + if register_data.form is None: + form = register_data.fields_form + + if form is not None: + self.get_page('form').add_form(form) + + else: + self.get_page('form').remove_form() + self._disconnect() + return + + except (StanzaError, MalformedStanzaError) as error: + self._set_error_text(error) + self.get_page('form').remove_form() + self._disconnect() return username, password = self.get_page('form').get_credentials() @@ -489,31 +513,13 @@ def _on_register_result(self, result): self.get_page('form').remove_form() self._disconnect() - def _on_register_error(self, result): - error_text = result.get_text() + def _set_error_text(self, error): + error_text = error.get_text() if not error_text: error_text = _('The server rejected the registration ' 'without an error message') self._show_error_page(_('Error'), _('Error'), error_text) - register_data = result.get_data() - if register_data is None: - # IQ error did not have the payload included - self.get_page('form').remove_form() - self._disconnect() - return - - form = register_data.form - if register_data.form is None: - form = register_data.fields_form - - if form is not None: - self.get_page('form').add_form(form) - - else: - self.get_page('form').remove_form() - self._disconnect() - def _on_destroy(self, *args): self._disconnect() self._destroyed = True