use NEC to handle account creation events

This commit is contained in:
Yann Leboulanger 2010-11-07 18:26:31 +01:00
parent 375c9cf05e
commit 60e8c63a29
5 changed files with 42 additions and 27 deletions

View File

@ -823,9 +823,11 @@ class Connection(CommonConnection, ConnectionHandlers):
self.new_account_info['hostname'] == data[0]:
# it's a new account
if not data[1]: # wrong answer
self.dispatch('ACC_NOT_OK', (
_('Server %(name)s answered wrongly to register request: '
'%(error)s') % {'name': data[0], 'error': data[3]}))
reason = _('Server %(name)s answered wrongly to '
'register request: %(error)s') % {'name': data[0],
'error': data[3]}
gajim.nec.push_incoming_event(AccountNotCreated(None,
conn=self, reason=reason))
return
is_form = data[2]
conf = data[1]
@ -833,13 +835,16 @@ class Connection(CommonConnection, ConnectionHandlers):
if self.new_account_form:
def _on_register_result(result):
if not common.xmpp.isResultNode(result):
self.dispatch('ACC_NOT_OK', (result.getError()))
gajim.nec.push_incoming_event(AccountNotCreated(
None, conn=self, reason=result.getError()))
return
if gajim.HAVE_GPG:
self.USE_GPG = True
self.gpg = GnuPG.GnuPG(gajim.config.get(
'use_gpg_agent'))
self.dispatch('ACC_OK', (self.new_account_info))
gajim.nec.push_incoming_event(
AccountCreatedEvent(None, conn=self,
account_info = self.new_account_info))
self.new_account_info = None
self.new_account_form = None
if self.connection:
@ -858,9 +863,10 @@ class Connection(CommonConnection, ConnectionHandlers):
if self.new_account_form.keys().sort() != \
conf.keys().sort():
# requested config has changed since first connection
self.dispatch('ACC_NOT_OK', (_(
'Server %s provided a different registration form')\
% data[0]))
reason = _('Server %s provided a different '
'registration form') % data[0]
gajim.nec.push_incoming_event(AccountNotCreated(
None, conn=self, reason=reason))
return
common.xmpp.features_nb.register(self.connection,
self._hostname, self.new_account_form,

View File

@ -1232,4 +1232,12 @@ class ArchivingPreferencesChangedReceivedEvent(nec.NetworkIncomingEvent):
elif self.stanza.getTag('itemremove'):
for item in pref.getTags('item'):
self.removed_items.append(item.getAttr('jid'))
return True
return True
class AccountCreatedEvent(nec.NetworkIncomingEvent):
name = 'account-created'
base_network_events = []
class AccountNotCreatedEvent(nec.NetworkIncomingEvent):
name = 'account-not-created'
base_network_events = []

View File

@ -3447,9 +3447,10 @@ class AccountCreationWizardWindow:
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('ACC_OK', ged.CORE, self.acc_is_ok)
gajim.ged.register_event_handler('ACC_NOT_OK', ged.CORE,
self.acc_is_not_ok)
gajim.ged.register_event_handler('account-created', ged.GUI1,
self._nec_acc_is_ok)
gajim.ged.register_event_handler('account-not-created', ged.GUI1,
self._nec_acc_is_not_ok)
def on_wizard_window_destroy(self, widget):
page = self.notebook.get_current_page()
@ -3463,9 +3464,10 @@ class AccountCreationWizardWindow:
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('ACC_OK', ged.CORE, self.acc_is_ok)
gajim.ged.remove_event_handler('ACC_NOT_OK', ged.CORE,
self.acc_is_not_ok)
gajim.ged.remove_event_handler('account-created', ged.GUI1,
self._nec_acc_is_ok)
gajim.ged.remove_event_handler('account-not-created', ged.GUI1,
self._nec_acc_is_not_ok)
del gajim.interface.instances['account_creation_wizard']
def on_register_server_features_button_clicked(self, widget):
@ -3772,25 +3774,25 @@ class AccountCreationWizardWindow:
self.finish_label.set_markup(finish_text)
self.notebook.set_current_page(6) # show finish page
def acc_is_ok(self, account, config):
def _nec_acc_is_ok(self, obj):
"""
Account creation succeeded
"""
# We receive events from all accounts from GED
if account != self.account:
if obj.conn.name != self.account:
return
self.create_vars(config)
self.create_vars(obj.account_info)
self.show_finish_page()
if self.update_progressbar_timeout_id is not None:
gobject.source_remove(self.update_progressbar_timeout_id)
def acc_is_not_ok(self, account, reason):
def _nec_acc_is_not_ok(self, obj):
"""
Account creation failed
"""
# We receive events from all accounts from GED
if account != self.account:
if obj.conn.name != self.account:
return
self.back_button.show()
self.cancel_button.show()
@ -3802,7 +3804,7 @@ class AccountCreationWizardWindow:
img = self.xml.get_object('finish_image')
img.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG)
finish_text = '<big><b>%s</b></big>\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

View File

@ -585,11 +585,6 @@ class Interface:
gajim.interface.instances[account]['pep_services'].items_received(
array[2])
def handle_event_acc_ok(self, account, array):
#('ACC_OK', account, (config))
if self.remote_ctrl:
self.remote_ctrl.raise_signal('NewAccount', (account, array))
def handle_event_myvcard(self, account, array):
nick = ''
if 'NICKNAME' in array and array['NICKNAME']:
@ -1811,7 +1806,6 @@ class Interface:
'AGENT_REMOVED': [self.handle_event_agent_removed],
'REGISTER_AGENT_INFO': [self.handle_event_register_agent_info],
'AGENT_INFO_ITEMS': [self.handle_event_agent_info_items],
'ACC_OK': [self.handle_event_acc_ok],
'MYVCARD': [self.handle_event_myvcard],
'VCARD': [self.handle_event_vcard],
'GC_NOTIFY': [self.handle_event_gc_notify],

View File

@ -127,6 +127,8 @@ class Remote:
ged.POSTGUI, self.on_gc_message_received)
gajim.ged.register_event_handler('our-show',
ged.POSTGUI, self.on_our_status)
gajim.ged.register_event_handler('account-created',
ged.POSTGUI, self.on_account_created)
def on_last_status_time(self, obj):
self.raise_signal('LastStatusTime', (obj.conn.name, [
@ -183,6 +185,9 @@ class Remote:
def on_our_status(self, obj):
self.raise_signal('AccountPresence', (obj.show, obj.conn.name))
def on_account_created(self, obj):
self.raise_signal('NewAccount', (obj.conn.name, obj.account_info))
def raise_signal(self, signal, arg):
if self.signal_object:
try: