Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMorgan Collett <morgan.collett@gmail.com>2007-10-03 19:39:07 (GMT)
committer Morgan Collett <morgan.collett@gmail.com>2007-10-15 16:16:31 (GMT)
commitf1df5361e18d4b54a18ec3f4f23d53be6b93242d (patch)
treebd4815c1272c8f5f4250334bc236b10bc142b7c5 /sugar
parentc9908a6d2777e0635f15557e95cecd5beaf77823 (diff)
Cache handle-buddies so we can get them when the buddy has already left
Diffstat (limited to 'sugar')
-rw-r--r--sugar/presence/activity.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/sugar/presence/activity.py b/sugar/presence/activity.py
index 0042493..de52ea7 100644
--- a/sugar/presence/activity.py
+++ b/sugar/presence/activity.py
@@ -90,6 +90,8 @@ class Activity(gobject.GObject):
self._tags = None
self._private = True
self._joined = False
+ # Cache for get_buddy_by_handle
+ self._handle_to_buddy = {}
def _get_properties_reply_cb(self, new_props):
self._properties_changed_cb(new_props)
@@ -215,12 +217,24 @@ class Activity(gobject.GObject):
return buddies
def get_buddy_by_handle(self, handle):
- """Retrieve the Buddy object given a telepathy handle."""
- buddyhandle = self._activity.GetBuddyByHandle(handle)
- if buddyhandle:
- buddy = self._ps_new_object(buddyhandle)
- else:
- buddy = None
+ """Retrieve the Buddy object given a telepathy handle.
+
+ buddies are cached in self._handle_to_buddy, so we can
+ still get the buddy after they have left the activity.
+ """
+ buddy = self._handle_to_buddy.get(handle, None)
+ if not buddy:
+ try:
+ buddyhandle = self._activity.GetBuddyByHandle(handle)
+ except:
+ # FIXME: Need to catch NotFoundError but that's defined
+ # in presence-service psutils
+ buddyhandle = None
+ if buddyhandle:
+ buddy = self._ps_new_object(buddyhandle)
+ self._handle_to_buddy[handle] = buddy
+ else:
+ buddy = None
return buddy
def invite(self, buddy, message, response_cb):