diff options
author | Dan Williams <dcbw@localhost.localdomain> | 2006-09-22 19:49:16 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@localhost.localdomain> | 2006-09-22 19:49:16 (GMT) |
commit | 2f7b3abef774affe10439b1616be505a3bd66229 (patch) | |
tree | 3f416fa2e1b74ef16eec1b30ee250955a88a109f /shell | |
parent | fcef47181b910e10851ae22621c10f7a393e7b29 (diff) |
Monitor buddy property change signals on creation; misc cleanups
Diffstat (limited to 'shell')
-rw-r--r-- | shell/model/BuddyModel.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/shell/model/BuddyModel.py b/shell/model/BuddyModel.py index 0d36a4e..9e6c6bd 100644 --- a/shell/model/BuddyModel.py +++ b/shell/model/BuddyModel.py @@ -3,13 +3,19 @@ from sugar.canvas.IconColor import IconColor class BuddyModel: def __init__(self, buddy=None): - if buddy: - self.set_name(buddy.get_name()) - self.set_color(buddy.get_color()) - self._buddy = buddy self._cur_activity = None self._pservice = PresenceService.get_instance() - self._pservice.connect('buddy-appeared', self.__buddy_appeared_cb) + + self._buddy = buddy + if self._buddy: + self.set_name(self._buddy.get_name()) + self.set_color(self._buddy.get_color()) + self._buddy.connect('property-changed', + self.__buddy_property_changed_cb) + else: + # if we don't have a buddy yet, connect to the PS + # and wait until the buddy pops up on the network + self._pservice.connect('buddy-appeared', self.__buddy_appeared_cb) def set_name(self, name): self._name = name @@ -24,18 +30,24 @@ class BuddyModel: return self._color def get_buddy(self): - if not self._buddy: - self._buddy = self._pservice.get_buddy_by_name(self._name) - if self._buddy: - self._buddy.connect('property-changed', - self.__buddy_property_changed_cb) + # If we have a buddy already, just return + if self._buddy: + return self._buddy + + # Otherwise try to get the buddy from the PS + self._buddy = self._pservice.get_buddy_by_name(self._name) + if self._buddy: + self._buddy.connect('property-changed', + self.__buddy_property_changed_cb) return self._buddy def __buddy_appeared_cb(self, pservice, buddy): + # FIXME: use public key rather than buddy name if not self._buddy and buddy.get_name() == self._name: self.get_buddy() def __buddy_property_changed_cb(self, buddy, keys): + # all we care about right now is current activity curact = self._buddy.get_current_activity() self._cur_activity = self._pservice.get_activity(curact) |