Philipp Hörist pushed to branch gajim_1.1 at gajim / gajim
Commits:
-
ff9afe19
by Alexander Bogdanov at 2019-04-16T16:33:32Z
2 changed files:
Changes:
| ... | ... | @@ -92,7 +92,10 @@ class Register: |
| 92 | 92 |
error = stanza.getErrorMsg()
|
| 93 | 93 |
log.info('Error: %s', error)
|
| 94 | 94 |
if error_cb() is not None:
|
| 95 |
- error_cb()(error)
|
|
| 95 |
+ form = is_form = None
|
|
| 96 |
+ if stanza.getTagAttr('error', 'type') == 'modify':
|
|
| 97 |
+ form, is_form = self._get_register_form(stanza)
|
|
| 98 |
+ error_cb()(error, form, is_form)
|
|
| 96 | 99 |
return
|
| 97 | 100 |
|
| 98 | 101 |
self._con.get_module('Presence').subscribe(agent, auto_auth=True)
|
| ... | ... | @@ -116,8 +119,7 @@ class Register: |
| 116 | 119 |
iq, self._register_info_response, {'success_cb': weak_success_cb,
|
| 117 | 120 |
'error_cb': weak_error_cb})
|
| 118 | 121 |
|
| 119 |
- @staticmethod
|
|
| 120 |
- def _register_info_response(_con, stanza, success_cb, error_cb):
|
|
| 122 |
+ def _register_info_response(self, _con, stanza, success_cb, error_cb):
|
|
| 121 | 123 |
if not nbxmpp.isResultNode(stanza):
|
| 122 | 124 |
error = stanza.getErrorMsg()
|
| 123 | 125 |
log.info('Error: %s', error)
|
| ... | ... | @@ -125,18 +127,28 @@ class Register: |
| 125 | 127 |
error_cb()(error)
|
| 126 | 128 |
else:
|
| 127 | 129 |
log.info('Register form received')
|
| 128 |
- form = stanza.getQuery().getTag('x', namespace=nbxmpp.NS_DATA)
|
|
| 129 |
- is_form = form is not None
|
|
| 130 |
- if not is_form:
|
|
| 131 |
- form = {}
|
|
| 132 |
- for field in stanza.getQueryPayload():
|
|
| 133 |
- if not isinstance(field, nbxmpp.Node):
|
|
| 134 |
- continue
|
|
| 135 |
- form[field.getName()] = field.getData()
|
|
| 136 | 130 |
|
| 137 | 131 |
if success_cb() is not None:
|
| 132 |
+ form, is_form = self._get_register_form(stanza)
|
|
| 138 | 133 |
success_cb()(form, is_form)
|
| 139 | 134 |
|
| 135 |
+ @staticmethod
|
|
| 136 |
+ def _get_register_form(stanza):
|
|
| 137 |
+ query = stanza.getTag('query')
|
|
| 138 |
+ if not query:
|
|
| 139 |
+ return None, False
|
|
| 140 |
+ |
|
| 141 |
+ form = query.getTag('x', namespace=nbxmpp.NS_DATA)
|
|
| 142 |
+ is_form = form is not None
|
|
| 143 |
+ if not is_form:
|
|
| 144 |
+ form = {}
|
|
| 145 |
+ for field in query.getPayload():
|
|
| 146 |
+ if not isinstance(field, nbxmpp.Node):
|
|
| 147 |
+ continue
|
|
| 148 |
+ form[field.getName()] = field.getData()
|
|
| 149 |
+ |
|
| 150 |
+ return form, is_form
|
|
| 151 |
+ |
|
| 140 | 152 |
|
| 141 | 153 |
def get_instance(*args, **kwargs):
|
| 142 | 154 |
return Register(*args, **kwargs), 'Register'
|
| ... | ... | @@ -75,6 +75,14 @@ class ServiceRegistration(Gtk.Assistant): |
| 75 | 75 |
sidebar = main_box.get_children()[0]
|
| 76 | 76 |
main_box.remove(sidebar)
|
| 77 | 77 |
|
| 78 |
+ def _build_dataform(self, form, is_form):
|
|
| 79 |
+ if not is_form:
|
|
| 80 |
+ from gajim import config
|
|
| 81 |
+ return config.FakeDataForm(form)
|
|
| 82 |
+ |
|
| 83 |
+ dataform = dataforms.extend_form(node=form)
|
|
| 84 |
+ return DataFormWidget(dataform)
|
|
| 85 |
+ |
|
| 78 | 86 |
def _on_page_change(self, assistant, page):
|
| 79 | 87 |
if self.get_current_page() == Page.REQUEST:
|
| 80 | 88 |
self._con.get_module('Register').get_register_form(
|
| ... | ... | @@ -86,23 +94,22 @@ class ServiceRegistration(Gtk.Assistant): |
| 86 | 94 |
def _on_get_success(self, form, is_form):
|
| 87 | 95 |
log.info('Show Form page')
|
| 88 | 96 |
self._is_form = is_form
|
| 89 |
- if is_form:
|
|
| 90 |
- dataform = dataforms.extend_form(node=form)
|
|
| 91 |
- self._data_form_widget = DataFormWidget(dataform)
|
|
| 92 |
- else:
|
|
| 93 |
- from gajim import config
|
|
| 94 |
- self._data_form_widget = config.FakeDataForm(form)
|
|
| 97 |
+ self._data_form_widget = self._build_dataform(form, is_form)
|
|
| 95 | 98 |
|
| 96 |
- page = self.get_nth_page(Page.FORM)
|
|
| 97 |
- page.pack_start(self._data_form_widget, True, True, 0)
|
|
| 98 |
- self._data_form_widget.show_all()
|
|
| 99 |
+ self.get_nth_page(Page.FORM).set_form(self._data_form_widget)
|
|
| 99 | 100 |
self.set_current_page(Page.FORM)
|
| 100 | 101 |
|
| 101 |
- def _on_error(self, error_text):
|
|
| 102 |
- log.info('Show Error page')
|
|
| 103 |
- page = self.get_nth_page(Page.ERROR)
|
|
| 104 |
- page.set_text(error_text)
|
|
| 105 |
- self.set_current_page(Page.ERROR)
|
|
| 102 |
+ def _on_error(self, error_text, form=None, is_form=False):
|
|
| 103 |
+ if form is not None:
|
|
| 104 |
+ log.info('Show Form page')
|
|
| 105 |
+ self._is_form = is_form
|
|
| 106 |
+ self._data_form_widget = self._build_dataform(form, is_form)
|
|
| 107 |
+ self.get_nth_page(Page.FORM).set_form(self._data_form_widget, error_text=error_text)
|
|
| 108 |
+ self.set_current_page(Page.FORM)
|
|
| 109 |
+ else:
|
|
| 110 |
+ log.info('Show Error page')
|
|
| 111 |
+ self.get_nth_page(Page.ERROR).set_text(error_text)
|
|
| 112 |
+ self.set_current_page(Page.ERROR)
|
|
| 106 | 113 |
|
| 107 | 114 |
def _on_cancel(self, widget):
|
| 108 | 115 |
self.destroy()
|
| ... | ... | @@ -159,6 +166,25 @@ class FormPage(Gtk.Box): |
| 159 | 166 |
|
| 160 | 167 |
def __init__(self):
|
| 161 | 168 |
super().__init__(orientation=Gtk.Orientation.VERTICAL)
|
| 169 |
+ self._form = None
|
|
| 170 |
+ self._label = Gtk.Label()
|
|
| 171 |
+ self._label.set_no_show_all(True)
|
|
| 172 |
+ self._label.get_style_context().add_class('error-color')
|
|
| 173 |
+ self.pack_end(self._label, False, False, 0)
|
|
| 174 |
+ |
|
| 175 |
+ def set_form(self, form, error_text=None):
|
|
| 176 |
+ if self._form is not None:
|
|
| 177 |
+ self.remove(self._form)
|
|
| 178 |
+ self._form.destroy()
|
|
| 179 |
+ self._label.hide()
|
|
| 180 |
+ self._form = form
|
|
| 181 |
+ |
|
| 182 |
+ if error_text is not None:
|
|
| 183 |
+ self._label.set_text(error_text)
|
|
| 184 |
+ self._label.show()
|
|
| 185 |
+ |
|
| 186 |
+ self.pack_start(form, True, True, 0)
|
|
| 187 |
+ self._form.show_all()
|
|
| 162 | 188 |
|
| 163 | 189 |
|
| 164 | 190 |
class SuccessfulPage(Gtk.Box):
|