Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorJohn (J5) Palmieri <johnp@redhat.com>2007-08-27 19:47:58 (GMT)
committer John (J5) Palmieri <johnp@redhat.com>2007-08-27 19:47:58 (GMT)
commitc06d63948794cce11e5b59e98f2ec2122a433972 (patch)
tree955687e89dbdff6dfc29ee2d07cf3d8f5aeea9c7 /shell
parent2cae66b0ea86235788220c9f7b05aa2ad4fdc58f (diff)
Make D-Bus calls async on startup
Diffstat (limited to 'shell')
-rw-r--r--shell/model/BuddyModel.py35
-rw-r--r--shell/model/MeshModel.py14
-rw-r--r--shell/view/frame/ActivitiesBox.py9
-rw-r--r--shell/view/frame/FriendsBox.py7
4 files changed, 43 insertions, 22 deletions
diff --git a/shell/model/BuddyModel.py b/shell/model/BuddyModel.py
index 9f86e57..f72ad70 100644
--- a/shell/model/BuddyModel.py
+++ b/shell/model/BuddyModel.py
@@ -52,27 +52,36 @@ class BuddyModel(gobject.GObject):
self._buddy = None
- # If given just a key, try to get the buddy from the PS first
if not buddy:
- self._key = key
- for iter_buddy in self._pservice.get_buddies():
- if iter_buddy.props.key == key:
- buddy = iter_buddy
- break
-
- # If successful, copy properties from the PS buddy object
- if buddy:
- self._update_buddy(buddy)
- else:
- # Otherwise, connect to the PS's buddy-appeared signal and
+ self._key = key
+ # connect to the PS's buddy-appeared signal and
# wait for the buddy to appear
self._ba_handler = self._pservice.connect('buddy-appeared',
self._buddy_appeared_cb)
- self._key = key
# Set color to 'inactive'/'disconnected'
self._set_color_from_string(_NOT_PRESENT_COLOR)
self._nick = nick
+ self._pservice.get_buddies_async(reply_handler=self._get_buddies_cb)
+ else:
+ self._update_buddy(buddy)
+
+ def _get_buddies_cb(self, list):
+ buddy = None
+ for iter_buddy in list:
+ if iter_buddy.props.key == key:
+ buddy = iter_buddy
+ break
+
+ if buddy:
+ if self._ba_handler:
+ # Once we have the buddy, we no longer need to
+ # monitor buddy-appeared events
+ self._pservice.disconnect(self._ba_handler)
+ self._ba_handler = None
+
+ self._update_buddy(buddy)
+
def _set_color_from_string(self, color_string):
self._color = XoColor(color_string)
diff --git a/shell/model/MeshModel.py b/shell/model/MeshModel.py
index 82980c3..e326634 100644
--- a/shell/model/MeshModel.py
+++ b/shell/model/MeshModel.py
@@ -87,11 +87,9 @@ class MeshModel(gobject.GObject):
self._buddy_disappeared_cb)
# Add any buddies the PS knows about already
- for buddy in self._pservice.get_buddies():
- self._buddy_appeared_cb(self._pservice, buddy)
+ self._pservice.get_buddies_async(reply_handler=self._get_buddies_cb)
- for activity in self._pservice.get_activities():
- self._check_activity(activity)
+ self._pservice.get_activities_async(reply_handler=self._get_activities_cb)
network_manager = hardwaremanager.get_network_manager()
if network_manager:
@@ -102,6 +100,14 @@ class MeshModel(gobject.GObject):
network_manager.connect('device-removed',
self._nm_device_removed_cb)
+ def _get_buddies_cb(self, list):
+ for buddy in list:
+ self._buddy_appeared_cb(self._pservice, buddy)
+
+ def _get_activities_cb(self, list):
+ for activity in list:
+ self._check_activity(activity)
+
def _nm_device_added_cb(self, manager, nm_device):
self._add_network_device(nm_device)
diff --git a/shell/view/frame/ActivitiesBox.py b/shell/view/frame/ActivitiesBox.py
index 909a5f2..43db16d 100644
--- a/shell/view/frame/ActivitiesBox.py
+++ b/shell/view/frame/ActivitiesBox.py
@@ -68,9 +68,7 @@ class ActivitiesBox(hippo.CanvasBox):
self._invites = self._shell_model.get_invites()
registry = activity.get_registry()
- for activity_info in registry.get_activities():
- if activity_info.show_launcher:
- self.add_activity(activity_info)
+ registry.get_activities_async(reply_handler=self._get_activities_cb)
registry.connect('activity-added', self._activity_added_cb)
@@ -79,6 +77,11 @@ class ActivitiesBox(hippo.CanvasBox):
self._invites.connect('invite-added', self._invite_added_cb)
self._invites.connect('invite-removed', self._invite_removed_cb)
+ def _get_activities_cb(self, activity_list):
+ for activity_info in activity_list:
+ if activity_info.show_launcher:
+ self.add_activity(activity_info)
+
def _activity_clicked_cb(self, icon):
self._shell.start_activity(icon.get_bundle_id())
diff --git a/shell/view/frame/FriendsBox.py b/shell/view/frame/FriendsBox.py
index 30f5963..b634cb1 100644
--- a/shell/view/frame/FriendsBox.py
+++ b/shell/view/frame/FriendsBox.py
@@ -54,13 +54,16 @@ class FriendsBox(hippo.CanvasBox):
self.__activity_appeared_cb)
# Add initial activities the PS knows about
- for activity in self._pservice.get_activities():
- self.__activity_appeared_cb(self._pservice, activity)
+ self._pservice.get_activities_async(reply_handler=self._get_activities_cb)
home_model = shell.get_model().get_home()
home_model.connect('active-activity-changed',
self._active_activity_changed_cb)
+ def _get_activities_cb(self, list):
+ for activity in list:
+ self.__activity_appeared_cb(self._pservice, activity)
+
def add_buddy(self, buddy):
if self._buddies.has_key(buddy.props.key):
return