diff options
author | Dan Williams <dcbw@redhat.com> | 2006-06-13 01:33:05 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2006-06-13 01:33:05 (GMT) |
commit | 21d1294c7a0ca94f5d34a4e401749e9511f68f46 (patch) | |
tree | cb15ab1492fdf210cc4b67c63caa37ec1ff5df1f | |
parent | 20d7582f1d55b6523d1ac041c0ce2d2d8580788b (diff) |
Fix service disappearance
-rw-r--r-- | sugar/presence/PresenceService.py | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py index c759fb4..443648e 100644 --- a/sugar/presence/PresenceService.py +++ b/sugar/presence/PresenceService.py @@ -244,21 +244,27 @@ class PresenceService(gobject.GObject): def _service_disappeared_cb(self, interface, protocol, name, stype, domain, flags): self._log("service '%s' of type '%s' in domain '%s' on %i.%i disappeared." % (name, stype, domain, interface, protocol)) - try: - # Remove the service from the buddy - buddy = self._buddies[name] - # FIXME: need to be more careful about how we remove services - # from buddies; this could be spoofed - service = buddy.get_service_of_type(stype) - buddy.remove_service(service) - if not buddy.is_valid(): - self.emit("buddy-disappeared", buddy) - del self._buddies[name] - except KeyError: - pass - + # If it's an unresolved service, remove it from our unresolved list + found = self._find_service(self._unresolved_services, name=name, + stype=stype, domain=domain) for service in found: self._unresolved_services.remove(service) + + # Unresolved services by definition aren't assigned to a buddy + if not len(found): + try: + # Remove the service from the buddy + buddy = self._buddies[name] + # FIXME: need to be more careful about how we remove services + # from buddies; this could be spoofed + service = buddy.get_service_of_type(stype) + buddy.remove_service(service) + if not buddy.is_valid(): + self.emit("buddy-disappeared", buddy) + del self._buddies[name] + except KeyError: + pass + return False def _service_disappeared_cb_glue(self, interface, protocol, name, stype, domain, flags): |