Make D-Bus calls async on startup
This commit is contained in:
+22
-13
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user