Philipp Hörist pushed to branch gajim_1.1 at gajim / gajim

Commits:

2 changed files:

Changes:

  • gajim/common/modules/register.py
    ... ... @@ -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'

  • gajim/gtk/service_registration.py
    ... ... @@ -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):