Fix invitations from a non sugar client (empathy), part of OLPC #10814
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@laptop.org> Acked-By: Sascha Silbe <silbe@activitycentral.com>
This commit is contained in:
parent
67143d8042
commit
c86b6d5917
@ -68,6 +68,7 @@ from telepathy.interfaces import CHANNEL, \
|
|||||||
CLIENT, \
|
CLIENT, \
|
||||||
CLIENT_HANDLER
|
CLIENT_HANDLER
|
||||||
from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT
|
from telepathy.constants import CONNECTION_HANDLE_TYPE_CONTACT
|
||||||
|
from telepathy.constants import CONNECTION_HANDLE_TYPE_ROOM
|
||||||
|
|
||||||
from sugar import util
|
from sugar import util
|
||||||
from sugar.presence import presenceservice
|
from sugar.presence import presenceservice
|
||||||
@ -389,17 +390,22 @@ class Activity(Window, gtk.Container):
|
|||||||
else:
|
else:
|
||||||
logging.debug('Unknown share scope %r', share_scope)
|
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')
|
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()
|
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)
|
self._set_up_sharing(mesh_instance, SCOPE_PRIVATE)
|
||||||
wait_loop.quit()
|
wait_loop.quit()
|
||||||
|
|
||||||
@ -945,8 +951,11 @@ class _ClientHandler(dbus.service.Object, DBusProperties):
|
|||||||
account, connection, channels, requests_satisfied,
|
account, connection, channels, requests_satisfied,
|
||||||
user_action_time, handler_info)
|
user_action_time, handler_info)
|
||||||
try:
|
try:
|
||||||
for channel in channels:
|
for object_path, properties in channels:
|
||||||
self._got_channel_cb(connection, channel[0])
|
channel_type = properties[CHANNEL + '.ChannelType']
|
||||||
|
handle_type = properties[CHANNEL + '.TargetHandleType']
|
||||||
|
if channel_type == CHANNEL_TYPE_TEXT:
|
||||||
|
self._got_channel_cb(connection, object_path, handle_type)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user