diff options
author | John (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) |
commit | c06d63948794cce11e5b59e98f2ec2122a433972 (patch) | |
tree | 955687e89dbdff6dfc29ee2d07cf3d8f5aeea9c7 /sugar | |
parent | 2cae66b0ea86235788220c9f7b05aa2ad4fdc58f (diff) |
Make D-Bus calls async on startup
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/activity/registry.py | 23 | ||||
-rw-r--r-- | sugar/presence/presenceservice.py | 57 |
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 |