Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
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 /sugar
parent2cae66b0ea86235788220c9f7b05aa2ad4fdc58f (diff)
Make D-Bus calls async on startup
Diffstat (limited to 'sugar')
-rw-r--r--sugar/activity/registry.py23
-rw-r--r--sugar/presence/presenceservice.py57
2 files changed, 80 insertions, 0 deletions
diff --git a/sugar/activity/registry.py b/sugar/activity/registry.py
index 8fdae2f..39c2b3c 100644
--- a/sugar/activity/registry.py
+++ b/sugar/activity/registry.py
@@ -77,6 +77,29 @@ class ActivityRegistry(gobject.GObject):
info_list = self._registry.GetActivities()
return self._convert_info_list(info_list)
+ def _get_activities_cb(self, reply_handler, info_list):
+ result = []
+ i = 0
+ for info_dict in info_list:
+ result.append(_activity_info_from_dict(info_dict))
+
+ reply_handler(result)
+
+ def _get_activities_error_cb(self, error_handler, e):
+ if error_handler:
+ error_handler(e)
+ else:
+ logging.error('Error getting activities async: %s' % str(e))
+
+ def get_activities_async(self, reply_handler=None, error_handler=None):
+ if not reply_handler:
+ logging.error('Function get_activities_async called without a reply handler. Can not run.')
+ return
+
+ self._registry.GetActivities(
+ reply_handler=lambda info_list:self._get_activities_cb(reply_handler, info_list),
+ error_handler=lambda e:self._get_activities_error_cb(error_handler, e))
+
def get_activity(self, service_name):
if self._service_name_to_activity_info.has_key(service_name):
return self._service_name_to_activity_info[service_name]
diff --git a/sugar/presence/presenceservice.py b/sugar/presence/presenceservice.py
index 9e39a35..7b64b20 100644
--- a/sugar/presence/presenceservice.py
+++ b/sugar/presence/presenceservice.py
@@ -268,6 +268,35 @@ class PresenceService(gobject.GObject):
acts.append(self._new_object(item))
return acts
+ def _get_activities_cb(self, reply_handler, resp):
+ acts = []
+ for item in resp:
+ acts.append(self._new_object(item))
+
+ reply_handler(acts)
+
+ def _get_activities_error_cb(self, error_handler, e):
+ if error_handler:
+ error_handler(e)
+ else:
+ _logger.warn(
+ """Unable to retrieve activity-list from presence service: %s"""
+ % e
+ )
+
+ def get_buddies_async(self, reply_handler=None, error_handler=None):
+ """Retrieve set of all activities from service asyncronously
+ """
+
+ if not reply_handler:
+ logging.error('Function get_activities_async called without a reply handler. Can not run.')
+ return
+
+ self._ps.GetActivities(
+ reply_handler=lambda resp:self._get_activities_cb(reply_handler, resp),
+ error_handler=lambda e:self._get_activities_error_cb(error_handler, e))
+
+
def get_activity(self, activity_id):
"""Retrieve single Activity object for the given unique id
@@ -306,6 +335,34 @@ class PresenceService(gobject.GObject):
buddies.append(self._new_object(item))
return buddies
+ def _get_buddies_cb(self, reply_handler, resp):
+ buddies = []
+ for item in resp:
+ buddies.append(self._new_object(item))
+
+ reply_handler(buddies)
+
+ def _get_buddies_error_cb(self, error_handler, e):
+ if error_handler:
+ error_handler(e)
+ else:
+ _logger.warn(
+ """Unable to retrieve buddy-list from presence service: %s"""
+ % e
+ )
+
+ def get_buddies_async(self, reply_handler=None, error_handler=None):
+ """Retrieve set of all buddies from service asyncronously
+ """
+
+ if not reply_handler:
+ logging.error('Function get_buddies_async called without a reply handler. Can not run.')
+ return
+
+ self._ps.GetBuddies(
+ reply_handler=lambda resp:self._get_buddies_cb(reply_handler, resp),
+ error_handler=lambda e:self._get_buddies_error_cb(error_handler, e))
+
def get_buddy(self, key):
"""Retrieve single Buddy object for the given public key