First implementation of auto_reconnect, poezio-side

This commit is contained in:
Florent Le Coz 2014-08-01 04:01:08 +02:00
parent 2fd71cd637
commit df569d4e66
3 changed files with 21 additions and 1 deletions

View file

@ -58,7 +58,6 @@ class Connection(slixmpp.ClientXMPP):
self['feature_mechanisms'].unencrypted_scram = False self['feature_mechanisms'].unencrypted_scram = False
self.core = None self.core = None
self.auto_reconnect = config.get('auto_reconnect', False)
self.reconnect_max_attempts = 0 self.reconnect_max_attempts = 0
self.auto_authorize = None self.auto_authorize = None
# prosody defaults, lowest is AES128-SHA, it should be a minimum # prosody defaults, lowest is AES128-SHA, it should be a minimum

View file

@ -110,6 +110,13 @@ class Core(object):
self.size = SizeManager(self, windows.Win) self.size = SizeManager(self, windows.Win)
# Set to True whenever we consider that we have been disconnected
# from the server because of a legitimate reason (bad credentials,
# or explicit disconnect from the user for example), in that case we
# should not try to auto-reconnect, even if auto_reconnect is true
# in the user config.
self.legitimate_disconnect = False
# global commands, available from all tabs # global commands, available from all tabs
# a command is tuple of the form: # a command is tuple of the form:
# (the function executing the command. Takes a string as argument, # (the function executing the command. Takes a string as argument,
@ -190,6 +197,7 @@ class Core(object):
self.key_func.update(key_func) self.key_func.update(key_func)
# Add handlers # Add handlers
self.xmpp.add_event_handler('connecting', self.on_connecting)
self.xmpp.add_event_handler('connected', self.on_connected) self.xmpp.add_event_handler('connected', self.on_connected)
self.xmpp.add_event_handler('connection_failed', self.on_failed_connection) self.xmpp.add_event_handler('connection_failed', self.on_failed_connection)
self.xmpp.add_event_handler('disconnected', self.on_disconnected) self.xmpp.add_event_handler('disconnected', self.on_disconnected)
@ -793,6 +801,7 @@ class Core(object):
Disconnect from remote server and correctly set the states of all Disconnect from remote server and correctly set the states of all
parts of the client (for example, set the MucTabs as not joined, etc) parts of the client (for example, set the MucTabs as not joined, etc)
""" """
self.legitimate_disconnect = True
msg = msg or '' msg = msg or ''
for tab in self.get_tabs(tabs.MucTab): for tab in self.get_tabs(tabs.MucTab):
tab.command_part(msg) tab.command_part(msg)
@ -1900,6 +1909,7 @@ class Core(object):
on_failed_all_auth = handlers.on_failed_all_auth on_failed_all_auth = handlers.on_failed_all_auth
on_no_auth = handlers.on_no_auth on_no_auth = handlers.on_no_auth
on_connected = handlers.on_connected on_connected = handlers.on_connected
on_connecting = handlers.on_connecting
on_session_start = handlers.on_session_start on_session_start = handlers.on_session_start
on_status_codes = handlers.on_status_codes on_status_codes = handlers.on_status_codes
on_groupchat_subject = handlers.on_groupchat_subject on_groupchat_subject = handlers.on_groupchat_subject

View file

@ -828,6 +828,9 @@ def on_disconnected(self, event):
for tab in self.get_tabs(tabs.MucTab): for tab in self.get_tabs(tabs.MucTab):
tab.disconnect() tab.disconnect()
self.information(_("Disconnected from server."), _('Error')) self.information(_("Disconnected from server."), _('Error'))
if not self.legitimate_disconnect and config.get('auto_reconnect', False):
self.information(_("Auto-reconnecting."), _('Info'))
self.xmpp.connect()
def on_failed_all_auth(self, event): def on_failed_all_auth(self, event):
""" """
@ -835,6 +838,7 @@ def on_failed_all_auth(self, event):
""" """
self.information(_("Authentication failed (bad credentials?)."), self.information(_("Authentication failed (bad credentials?)."),
_('Error')) _('Error'))
self.legitimate_disconnect = True
def on_no_auth(self, event): def on_no_auth(self, event):
""" """
@ -842,6 +846,7 @@ def on_no_auth(self, event):
""" """
self.information(_("Authentication failed, no login method available."), self.information(_("Authentication failed, no login method available."),
_('Error')) _('Error'))
self.legitimate_disconnect = True
def on_connected(self, event): def on_connected(self, event):
""" """
@ -849,6 +854,12 @@ def on_connected(self, event):
""" """
self.information(_("Connected to server."), 'Info') self.information(_("Connected to server."), 'Info')
def on_connecting(self, event):
"""
Just before we try to connect to the server
"""
self.legitimate_disconnect = False
def on_session_start(self, event): def on_session_start(self, event):
""" """
Called when we are connected and authenticated Called when we are connected and authenticated