[Sugar-devel] [PATCH sugar-toolkit] Fix invitations from a non sugar client (empathy), part of OLPC #10814
Simon Schampijer
simon at schampijer.de
Thu Apr 14 13:43:20 EDT 2011
This differentiates between sugar and non sugar invitations using the
handle type. For non-sugar invitations we use the activity id to
determine which activity to join.
Signed-off-by: Simon Schampijer <simon at laptop.org>
---
src/sugar/activity/activity.py | 37 +++++++++++++++++++++++++------------
1 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/src/sugar/activity/activity.py b/src/sugar/activity/activity.py
index 9df488a..4be3153 100644
--- a/src/sugar/activity/activity.py
+++ b/src/sugar/activity/activity.py
@@ -280,6 +280,7 @@ class Activity(Window, gtk.Container):
self._active = False
self._activity_id = handle.activity_id
self.shared_activity = None
+ self._client_handler = None
self._join_id = None
self._updating_jobject = False
self._closing = False
@@ -370,7 +371,9 @@ 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)
+ if self._client_handler is None:
+ self._client_handler = _ClientHandler(self.get_bundle_id(),
+ None)
self.shared_activity = mesh_instance
self.shared_activity.connect('notify::private',
self.__privacy_changed_cb)
@@ -392,17 +395,24 @@ class Activity(Window, gtk.Container):
else:
logging.debug('Unknown share scope %r', share_scope)
- def __got_channel_cb(self, wait_loop, connection_path, channel_path):
+ def __got_channel_cb(self, wait_loop, connection_path, channel_path,
+ handle_type):
logging.debug('Activity.__got_channel_cb')
- connection_name = connection_path.replace('/', '.')[1:]
-
- bus = dbus.SessionBus()
- channel = bus.get_object(connection_name, channel_path)
- room_handle = channel.Get(CHANNEL, 'TargetHandle')
pservice = presenceservice.get_instance()
- mesh_instance = pservice.get_activity_by_handle(connection_path,
- room_handle)
+ if handle_type == CONNECTION_HANDLE_TYPE_ROOM:
+ connection_name = connection_path.replace('/', '.')[1:]
+
+ bus = dbus.SessionBus()
+ channel = bus.get_object(connection_name, channel_path)
+ room_handle = channel.Get(CHANNEL, 'TargetHandle')
+
+
+ mesh_instance = pservice.get_activity_by_handle(connection_path,
+ room_handle)
+ else:
+ mesh_instance = pservice.get_activity(self._activity_id,
+ warn_if_none=False)
self._set_up_sharing(mesh_instance, SCOPE_PRIVATE)
wait_loop.quit()
@@ -955,14 +965,17 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
logging.debug('HandleChannels\n\t%r\n\t%r\n\t%r\n\t%r\n\t%r\n\t%r',
account, connection, channels, requests_satisfied,
user_action_time, handler_info)
+
+ if self._got_channel_cb is None:
+ return
+
try:
for channel in channels:
channel_properties = channel[1]
channel_type = channel_properties[CHANNEL + '.ChannelType']
handle_type = channel_properties[CHANNEL + '.TargetHandleType']
- if channel_type == CHANNEL_TYPE_TEXT and \
- handle_type == CONNECTION_HANDLE_TYPE_ROOM:
- self._got_channel_cb(connection, channel[0])
+ if channel_type == CHANNEL_TYPE_TEXT:
+ self._got_channel_cb(connection, channel[0], handle_type)
except Exception, e:
logging.exception(e)
--
1.7.4
More information about the Sugar-devel
mailing list