Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-04-21 23:09:59 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-04-21 23:09:59 (GMT)
commit51f56ed7a3a1ed6297ed0b871fbed5c28bae060d (patch)
tree1ab4321f8d03f396e806ab5579de1f96700492a4 /services
parent2848dc97ab594b7c3b25d40b63fe96809f48fc46 (diff)
Join/leave activity when its validity changes
Diffstat (limited to 'services')
-rw-r--r--services/presence/buddy.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/services/presence/buddy.py b/services/presence/buddy.py
index ab91cea..486fc05 100644
--- a/services/presence/buddy.py
+++ b/services/presence/buddy.py
@@ -110,6 +110,7 @@ class Buddy(DBusGObject):
dbus.service.Object.__init__(self, self._bus_name, self._object_path)
self._activities = {} # Activity ID -> Activity
+ self._activity_sigids = {}
self.handles = {} # tp client -> handle
self._valid = False
@@ -268,6 +269,13 @@ class Buddy(DBusGObject):
"""Retrieve our dbus.ObjectPath object"""
return dbus.ObjectPath(self._object_path)
+ def _activity_validity_changed_cb(self, activity, valid):
+ """Join or leave the activity when its validity changes"""
+ if valid:
+ self.JoinedActivity(activity.object_path())
+ else:
+ self.LeftActivity(activity.object_path())
+
def add_activity(self, activity):
"""Add an activity to the Buddy's set of activities
@@ -279,6 +287,9 @@ class Buddy(DBusGObject):
if self._activities.has_key(actid):
return
self._activities[actid] = activity
+ # join/leave activity when it's validity changes
+ sigid = activity.connect("validity-changed", self._activity_validity_changed_cb)
+ self._activity_sigids[actid] = sigid
if activity.props.valid:
self.JoinedActivity(activity.object_path())
@@ -292,6 +303,8 @@ class Buddy(DBusGObject):
actid = activity.props.id
if not self._activities.has_key(actid):
return
+ activity.disconnect(self._activity_sigids[actid])
+ del self._activity_sigids[actid]
del self._activities[actid]
if activity.props.valid:
self.LeftActivity(activity.object_path())