Make D-Bus calls async on startup

This commit is contained in:
John (J5) Palmieri
2007-08-27 15:47:58 -04:00
parent 2cae66b0ea
commit c06d639487
6 changed files with 123 additions and 22 deletions
+22 -13
View File
@@ -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)
+10 -4
View File
@@ -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)