Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-06-13 01:33:05 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-06-13 01:33:05 (GMT)
commit21d1294c7a0ca94f5d34a4e401749e9511f68f46 (patch)
treecb15ab1492fdf210cc4b67c63caa37ec1ff5df1f /sugar
parent20d7582f1d55b6523d1ac041c0ce2d2d8580788b (diff)
Fix service disappearance
Diffstat (limited to 'sugar')
-rw-r--r--sugar/presence/PresenceService.py32
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):