[Sugar-devel] [PATCH sugar-toolkit] Handle DBUS tubes in the activity telepathy client, part of OLPC #10738
Simon Schampijer
simon at schampijer.de
Tue Jun 7 05:46:42 EDT 2011
Tested-by: Samuel Greenfeld <greenfeld at laptop.org>
see: http://dev.laptop.org/ticket/10768
On 05/23/2011 01:17 PM, Simon Schampijer wrote:
> This adds the handling of DBUS tube channels to the
> 'HandlerChannelFilter' in activity's telepathy client.
>
> Signed-off-by: Simon Schampijer<simon at laptop.org>
> ---
> src/sugar/activity/activity.py | 30 ++++++++++++++++++++++--------
> 1 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
> index 35082cc..09ba3cc 100644
> --- a/src/sugar/activity/activity.py
> +++ b/src/sugar/activity/activity.py
> @@ -65,9 +65,11 @@ import cjson
> from telepathy.server import DBusProperties
> from telepathy.interfaces import CHANNEL, \
> CHANNEL_TYPE_TEXT, \
> + CHANNEL_TYPE_DBUS_TUBE, \
> CLIENT, \
> CLIENT_HANDLER
> from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT
> +from telepathy.constants import CONNECTION_HANDLE_TYPE_ROOM
>
> from sugar import util
> from sugar.presence import presenceservice
> @@ -368,6 +370,7 @@ class Activity(Window, gtk.Container):
> # There's already an instance on the mesh, join it
> logging.debug('*** Act %s joining existing mesh instance %r',
> self._activity_id, mesh_instance)
> + self._client_handler = _ClientHandler(self.get_bundle_id(), None)
> self.shared_activity = mesh_instance
> self.shared_activity.connect('notify::private',
> self.__privacy_changed_cb)
> @@ -927,15 +930,22 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
> })
>
> def __get_filters_cb(self):
> - logging.debug('__get_filters_cb')
> - filters = {
> + filter_text = {
> CHANNEL + '.ChannelType': CHANNEL_TYPE_TEXT,
> CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_CONTACT,
> }
> - filter_dict = dbus.Dictionary(filters, signature='sv')
> - logging.debug('__get_filters_cb %r', dbus.Array([filter_dict],
> - signature='a{sv}'))
> - return dbus.Array([filter_dict], signature='a{sv}')
> + filter_dict = dbus.Dictionary(filter_text, signature='sv')
> + filters = dbus.Array([filter_dict], signature='a{sv}')
> +
> + filter_tube = {
> + CHANNEL + '.ChannelType': CHANNEL_TYPE_DBUS_TUBE,
> + CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_ROOM,
> + }
> + filter_dict = dbus.Dictionary(filter_tube, signature='sv')
> + filters.append(filter_dict)
> +
> + logging.debug('__get_filters_cb Activity filters=%r', filters)
> + return filters
>
> @dbus.service.method(dbus_interface=CLIENT_HANDLER,
> in_signature='ooa(oa{sv})aota{sv}', out_signature='')
> @@ -945,8 +955,12 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
> account, connection, channels, requests_satisfied,
> user_action_time, handler_info)
> try:
> - for channel in channels:
> - self._got_channel_cb(connection, channel[0])
> + for object_path, properties in channels:
> + channel_type = properties[CHANNEL + '.ChannelType']
> + handle_type = properties[CHANNEL + '.TargetHandleType']
> + if channel_type == CHANNEL_TYPE_TEXT and \
> + handle_type == CONNECTION_HANDLE_TYPE_ROOM:
> + self._got_channel_cb(connection, object_path)
> except Exception, e:
> logging.exception(e)
>
More information about the Sugar-devel
mailing list