diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2007-02-26 11:28:50 (GMT) |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2007-02-26 11:28:50 (GMT) |
commit | d49a3b52abd99e9aa112a64a1a7fdb364c58125f (patch) | |
tree | 2477f631e5359b664661112de327c5b208082a49 /services/presence2/presenceservice.py | |
parent | 500bd702b14abbaeee836bbb14a98499dddccc16 (diff) |
only remove the buddy if we don't see it using all CM
Diffstat (limited to 'services/presence2/presenceservice.py')
-rw-r--r-- | services/presence2/presenceservice.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/services/presence2/presenceservice.py b/services/presence2/presenceservice.py index 2692f1a..fa115a8 100644 --- a/services/presence2/presenceservice.py +++ b/services/presence2/presenceservice.py @@ -80,6 +80,7 @@ class PresenceService(dbus.service.Object): pass def _contact_online(self, tp, handle, key): + new_buddy = False buddy = self._buddies.get(key) if not buddy: @@ -89,21 +90,30 @@ class PresenceService(dbus.service.Object): buddy.set_key(key) print "create buddy" self._buddies[key] = buddy + new_buddy = True buddies = self._handles[tp] buddies[handle] = buddy - self.BuddyAppeared(buddy.object_path()) + # store the handle of the buddy for this CM + buddy.handles[tp] = handle + + if new_buddy: + self.BuddyAppeared(buddy.object_path()) def _contact_offline(self, tp, handle): buddy = self._handles[tp].pop(handle) key = buddy.get_key() - # TODO: check if we don't see this buddy using the other CM - self._buddies.pop(key) - print "remove buddy" + # the handle of the buddy for this CM is not valid anymore + buddy.handles.pop(tp) - self.BuddyDisappeared(buddy.object_path()) + if not buddy.handles: + # we remove the last handle of the buddy, so we don't see + # it anymore. + self._buddies.pop(key) + print "remove buddy" + self.BuddyDisappeared(buddy.object_path()) def _get_next_object_id(self): """Increment and return the object ID counter.""" |