Simplify sharing code using new PS API (import the patch attached to #5079)

This commit is contained in:
Guillaume Desmottes 2008-05-14 15:07:48 +02:00
parent eb839c2ef9
commit 5c40a70e5e

View File

@ -271,78 +271,70 @@ class Activity(gobject.GObject):
def set_up_tubes(self, reply_handler, error_handler):
cpaths = []
chans = []
def tubes_chan_ready(chan):
_logger.debug('%r: Tubes channel %r is ready', self, chan)
self.telepathy_tubes_chan = chan
def tubes_ready():
if self.telepathy_text_chan is None or \
self.telepathy_tubes_chan is None:
return
_logger.debug('%r: finished setting up tubes', self)
reply_handler()
def got_tubes_chan(path):
_logger.debug('%r: got Tubes channel at %s', self, path)
telepathy.client.Channel(self.telepathy_conn.service_name,
path, ready_handler=tubes_chan_ready,
error_handler=error_handler)
def tubes_chan_ready(chan):
_logger.debug('%r: Tubes channel %r is ready', self, chan)
self.telepathy_tubes_chan = chan
tubes_ready()
def text_chan_ready(chan):
_logger.debug('%r: Text channel %r is ready', self, chan)
self.telepathy_text_chan = chan
self.telepathy_conn.RequestChannel(telepathy.CHANNEL_TYPE_TUBES,
telepathy.HANDLE_TYPE_ROOM,
self._telepathy_room_handle,
True,
reply_handler=got_tubes_chan,
error_handler=error_handler)
def got_text_chan(path):
_logger.debug('%r: got Text channel at %s', self, path)
telepathy.client.Channel(self.telepathy_conn.service_name,
path, ready_handler=text_chan_ready,
error_handler=error_handler)
tubes_ready()
def conn_ready(conn):
_logger.debug('%r: Connection %r is ready', self, conn)
self.telepathy_conn = conn
found_text_channel = False
found_tubes_channel = False
# For the moment we'll do this synchronously.
# If the PS gained a GetRoom method, we could
# do this async too
for chan_path, chan_iface, handle_type, handle in chans:
if handle_type != telepathy.HANDLE_TYPE_ROOM:
return
for channel_path in cpaths:
channel = telepathy.client.Channel(conn.service_name,
channel_path)
handle_type, handle = channel.GetHandle()
if handle_type == telepathy.HANDLE_TYPE_ROOM:
room = handle
break
if chan_iface == telepathy.CHANNEL_TYPE_TEXT:
telepathy.client.Channel(
conn.service_name, chan_path,
ready_handler=text_chan_ready,
error_handler=error_handler)
found_text_channel = True
if room is None:
elif chan_iface == telepathy.CHANNEL_TYPE_TUBES:
telepathy.client.Channel(
conn.service_name, chan_path,
ready_handler=tubes_chan_ready,
error_handler=error_handler)
found_tubes_channel = True
if not found_text_channel:
error_handler(AssertionError("Presence Service didn't create "
"a chatroom"))
else:
self._telepathy_room_handle = room
elif not found_tubes_channel:
error_handler(AssertionError("Presence Service didn't create "
"tubes channel"))
conn.RequestChannel(telepathy.CHANNEL_TYPE_TEXT,
telepathy.HANDLE_TYPE_ROOM,
room, True,
reply_handler=got_text_chan,
error_handler=error_handler)
def got_channels(bus_name, conn_path, channel_paths):
_logger.debug('%r: Connection on %s at %s, channel paths: %r',
self, bus_name, conn_path, channel_paths)
def channels_listed(bus_name, conn_path, channels):
_logger.debug('%r: Connection on %s at %s, channels: %r',
self, bus_name, conn_path, channels)
# can't use assignment for this due to Python scoping
cpaths.extend(channel_paths)
chans.extend(channels)
telepathy.client.Connection(bus_name, conn_path,
ready_handler=conn_ready,
error_handler=error_handler)
self._activity.GetChannels(reply_handler=got_channels,
self._activity.ListChannels(reply_handler=channels_listed,
error_handler=error_handler)
def _join_cb(self):