diff options
author | Morgan 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) |
commit | f1df5361e18d4b54a18ec3f4f23d53be6b93242d (patch) | |
tree | bd4815c1272c8f5f4250334bc236b10bc142b7c5 | |
parent | c9908a6d2777e0635f15557e95cecd5beaf77823 (diff) |
Cache handle-buddies so we can get them when the buddy has already left
-rw-r--r-- | sugar/presence/activity.py | 26 |
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): |