Some PS reliability fixes

This commit is contained in:
Dan Williams 2007-05-15 15:25:30 -04:00
parent ef00d72ca8
commit 82095ea26a

View File

@ -610,7 +610,10 @@ class ServerPlugin(gobject.GObject):
def cleanup(self): def cleanup(self):
"""If we still have a connection, disconnect it""" """If we still have a connection, disconnect it"""
if self._conn: if self._conn:
self._conn[CONN_INTERFACE].Disconnect() try:
self._conn[CONN_INTERFACE].Disconnect()
except:
pass
self._conn = None self._conn = None
self._conn_status = CONNECTION_STATUS_DISCONNECTED self._conn_status = CONNECTION_STATUS_DISCONNECTED
@ -658,10 +661,16 @@ class ServerPlugin(gobject.GObject):
reply_handler=lambda *args: self._contact_online_activities_cb(handle, *args), reply_handler=lambda *args: self._contact_online_activities_cb(handle, *args),
error_handler=lambda *args: self._contact_online_activities_error_cb(handle, *args)) error_handler=lambda *args: self._contact_online_activities_error_cb(handle, *args))
def _contact_online_aliases_error_cb(self, handle, err): def _contact_online_aliases_error_cb(self, handle, props, retry, err):
"""Handle failure to retrieve given user's alias/information""" """Handle failure to retrieve given user's alias/information"""
logging.debug("Handle %s - Error getting nickname: %s" % (handle, err)) if retry:
self._contact_offline(handle) logging.debug("Handle %s - Error getting nickname (will retry): %s" % (handle, err))
self._conn[CONN_INTERFACE_ALIASING].RequestAliases([handle],
reply_handler=lambda *args: self._contact_online_aliases_cb(handle, props, *args),
error_handler=lambda *args: self._contact_online_aliases_error_cb(handle, props, False, *args))
else:
logging.debug("Handle %s - Error getting nickname: %s" % (handle, err))
self._contact_offline(handle)
def _contact_online_properties_cb(self, handle, props): def _contact_online_properties_cb(self, handle, props):
"""Handle failure to retrieve given user's alias/information""" """Handle failure to retrieve given user's alias/information"""
@ -679,7 +688,7 @@ class ServerPlugin(gobject.GObject):
self._conn[CONN_INTERFACE_ALIASING].RequestAliases([handle], self._conn[CONN_INTERFACE_ALIASING].RequestAliases([handle],
reply_handler=lambda *args: self._contact_online_aliases_cb(handle, props, *args), reply_handler=lambda *args: self._contact_online_aliases_cb(handle, props, *args),
error_handler=lambda *args: self._contact_online_aliases_error_cb(handle, *args)) error_handler=lambda *args: self._contact_online_aliases_error_cb(handle, props, True, *args))
def _contact_online_properties_error_cb(self, handle, err): def _contact_online_properties_error_cb(self, handle, err):
"""Handle error retrieving property-set for a user (handle)""" """Handle error retrieving property-set for a user (handle)"""
@ -718,6 +727,15 @@ class ServerPlugin(gobject.GObject):
elif status in ["offline", "invisible"]: elif status in ["offline", "invisible"]:
self._contact_offline(handle) self._contact_offline(handle)
def _request_avatar_cb(self, handle, new_avatar_token, avatar, mime_type):
jid = self._online_contacts[handle]
if not jid:
logging.debug("Handle %s not valid yet..." % handle)
return
icon = ''.join(map(chr, avatar))
self._icon_cache.store_icon(jid, new_avatar_token, icon)
self.emit("avatar-updated", handle, icon)
def _avatar_updated_cb(self, handle, new_avatar_token): def _avatar_updated_cb(self, handle, new_avatar_token):
"""Handle update of given user (handle)'s avatar""" """Handle update of given user (handle)'s avatar"""
if handle == self._conn[CONN_INTERFACE].GetSelfHandle(): if handle == self._conn[CONN_INTERFACE].GetSelfHandle():
@ -737,11 +755,11 @@ class ServerPlugin(gobject.GObject):
icon = self._icon_cache.get_icon(jid, new_avatar_token) icon = self._icon_cache.get_icon(jid, new_avatar_token)
if not icon: if not icon:
# cache miss # cache miss
avatar, mime_type = self._conn[CONN_INTERFACE_AVATARS].RequestAvatar(handle) self._conn[CONN_INTERFACE_AVATARS].RequestAvatar(handle,
icon = ''.join(map(chr, avatar)) reply_handler=lambda *args: self._request_avatar_cb(handle, new_avatar_token, *args),
self._icon_cache.store_icon(jid, new_avatar_token, icon) error_handler=lambda *args: self._log_error_cb("getting avatar", *args))
else:
self.emit("avatar-updated", handle, icon) self.emit("avatar-updated", handle, icon)
def _alias_changed_cb(self, aliases): def _alias_changed_cb(self, aliases):
"""Handle update of aliases for all users""" """Handle update of aliases for all users"""