From 21d1294c7a0ca94f5d34a4e401749e9511f68f46 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 12 Jun 2006 21:33:05 -0400 Subject: [PATCH] Fix service disappearance --- sugar/presence/PresenceService.py | 32 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/sugar/presence/PresenceService.py b/sugar/presence/PresenceService.py index c759fb4f..443648ec 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):