Philipp Hörist pushed to branch master at gajim / gajim

Commits:

2 changed files:

Changes:

  • gajim/common/modules/register.py
    ... ... @@ -87,7 +87,10 @@ class Register(BaseModule):
    87 87
                 error = stanza.getErrorMsg()
    
    88 88
                 self._log.info('Error: %s', error)
    
    89 89
                 if error_cb() is not None:
    
    90
    -                error_cb()(error)
    
    90
    +                form = is_form = None
    
    91
    +                if stanza.getErrorType() == 'modify':
    
    92
    +                    form, is_form = self._get_register_form(stanza)
    
    93
    +                error_cb()(error, form, is_form)
    
    91 94
                 return
    
    92 95
     
    
    93 96
             self._con.get_module('Presence').subscribe(agent, auto_auth=True)
    
    ... ... @@ -119,19 +122,25 @@ class Register(BaseModule):
    119 122
                     error_cb()(error)
    
    120 123
             else:
    
    121 124
                 self._log.info('Register form received')
    
    122
    -            parse_bob_data(stanza.getQuery())
    
    123
    -            form = stanza.getQuery().getTag('x', namespace=nbxmpp.NS_DATA)
    
    124
    -            is_form = form is not None
    
    125
    -            if not is_form:
    
    126
    -                form = {}
    
    127
    -                for field in stanza.getQueryPayload():
    
    128
    -                    if not isinstance(field, nbxmpp.Node):
    
    129
    -                        continue
    
    130
    -                    form[field.getName()] = field.getData()
    
    131 125
     
    
    132 126
                 if success_cb() is not None:
    
    127
    +                form, is_form = self._get_register_form(stanza)
    
    133 128
                     success_cb()(form, is_form)
    
    134 129
     
    
    130
    +    @staticmethod
    
    131
    +    def _get_register_form(stanza):
    
    132
    +        parse_bob_data(stanza.getQuery())
    
    133
    +        form = stanza.getQuery().getTag('x', namespace=nbxmpp.NS_DATA)
    
    134
    +        is_form = form is not None
    
    135
    +        if not is_form:
    
    136
    +            form = {}
    
    137
    +            for field in stanza.getQueryPayload():
    
    138
    +                if not isinstance(field, nbxmpp.Node):
    
    139
    +                    continue
    
    140
    +                form[field.getName()] = field.getData()
    
    141
    +
    
    142
    +        return form, is_form
    
    143
    +
    
    135 144
     
    
    136 145
     def get_instance(*args, **kwargs):
    
    137 146
         return Register(*args, **kwargs), 'Register'

  • gajim/gtk/service_registration.py
    ... ... @@ -75,6 +75,18 @@ 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
    +
    
    85
    +        form_widget = DataFormWidget(dataform)
    
    86
    +        form_widget.connect('is-valid', self._on_is_valid)
    
    87
    +        form_widget.validate()
    
    88
    +        return form_widget
    
    89
    +
    
    78 90
         def _on_page_change(self, assistant, page):
    
    79 91
             if self.get_current_page() == Page.REQUEST:
    
    80 92
                 self._con.get_module('Register').get_register_form(
    
    ... ... @@ -86,28 +98,24 @@ class ServiceRegistration(Gtk.Assistant):
    86 98
         def _on_get_success(self, form, is_form):
    
    87 99
             log.info('Show Form page')
    
    88 100
             self._is_form = is_form
    
    89
    -        if is_form:
    
    90
    -            dataform = dataforms.extend_form(node=form)
    
    91
    -            self._data_form_widget = DataFormWidget(dataform)
    
    92
    -            self._data_form_widget.connect('is-valid', self._on_is_valid)
    
    93
    -            self._data_form_widget.validate()
    
    94
    -        else:
    
    95
    -            from gajim import config
    
    96
    -            self._data_form_widget = config.FakeDataForm(form)
    
    97
    -
    
    98
    -        page = self.get_nth_page(Page.FORM)
    
    99
    -        page.pack_start(self._data_form_widget, True, True, 0)
    
    100
    -        self._data_form_widget.show_all()
    
    101
    +        self._data_form_widget = self._build_dataform(form, is_form)
    
    102
    +        self.get_nth_page(Page.FORM).set_form(self._data_form_widget)
    
    101 103
             self.set_current_page(Page.FORM)
    
    102 104
     
    
    103 105
         def _on_is_valid(self, _widget, is_valid):
    
    104 106
             self.set_page_complete(self.get_nth_page(Page.FORM), is_valid)
    
    105 107
     
    
    106
    -    def _on_error(self, error_text):
    
    107
    -        log.info('Show Error page')
    
    108
    -        page = self.get_nth_page(Page.ERROR)
    
    109
    -        page.set_text(error_text)
    
    110
    -        self.set_current_page(Page.ERROR)
    
    108
    +    def _on_error(self, error_text, form=None, is_form=False):
    
    109
    +        if form is not None:
    
    110
    +            log.info('Show Form page')
    
    111
    +            self._is_form = is_form
    
    112
    +            self._data_form_widget = self._build_dataform(form, is_form)
    
    113
    +            self.get_nth_page(Page.FORM).set_form(self._data_form_widget, error_text=error_text)
    
    114
    +            self.set_current_page(Page.FORM)
    
    115
    +        else:
    
    116
    +            log.info('Show Error page')
    
    117
    +            self.get_nth_page(Page.ERROR).set_text(error_text)
    
    118
    +            self.set_current_page(Page.ERROR)
    
    111 119
     
    
    112 120
         def _on_cancel(self, widget):
    
    113 121
             self.destroy()
    
    ... ... @@ -164,6 +172,25 @@ class FormPage(Gtk.Box):
    164 172
     
    
    165 173
         def __init__(self):
    
    166 174
             super().__init__(orientation=Gtk.Orientation.VERTICAL)
    
    175
    +        self._form = None
    
    176
    +        self._label = Gtk.Label()
    
    177
    +        self._label.set_no_show_all(True)
    
    178
    +        self._label.get_style_context().add_class('error-color')
    
    179
    +        self.pack_end(self._label, False, False, 0)
    
    180
    +
    
    181
    +    def set_form(self, form, error_text=None):
    
    182
    +        if self._form is not None:
    
    183
    +            self.remove(self._form)
    
    184
    +            self._form.destroy()
    
    185
    +            self._label.hide()
    
    186
    +        self._form = form
    
    187
    +
    
    188
    +        if error_text is not None:
    
    189
    +            self._label.set_text(error_text)
    
    190
    +            self._label.show()
    
    191
    +
    
    192
    +        self.pack_start(form, True, True, 0)
    
    193
    +        self._form.show_all()
    
    167 194
     
    
    168 195
     
    
    169 196
     class SuccessfulPage(Gtk.Box):