- self._connRef = weakref.ref(connection)
- self._listChannels = weakref.WeakValueDictionary()
- self._textChannels = weakref.WeakValueDictionary()
- self._callChannels = weakref.WeakValueDictionary()
-
- def close(self):
- for chan in self._listChannels.values():
- chan.remove_from_connection()# so that dbus lets it die.
- for chan in self._textChannels.values():
- chan.Close()
- for chan in self._callChannels.values():
- chan.Close()
-
- def channel_for_list(self, handle, suppress_handler=False):
- if handle in self._listChannels:
- chan = self._listChannels[handle]
- else:
- if handle.get_type() == telepathy.HANDLE_TYPE_GROUP:
- chan = channel.contact_list.GroupChannel(self._connRef(), handle)
- elif handle.get_type() == telepathy.HANDLE_TYPE_CONTACT:
- chan = channel.contact_list.creat_contact_list_channel(self._connRef(), handle)
- else:
- logging.warn("Unknown channel type %r" % handle.get_type())
- self._listChannels[handle] = chan
- self._connRef().add_channel(chan, handle, suppress_handler)
+ tp.ChannelManager.__init__(self, connection)
+
+ fixed = {
+ telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_CONTACT_LIST
+ }
+ self._implement_channel_class(
+ telepathy.CHANNEL_TYPE_CONTACT_LIST,
+ self._get_list_channel,
+ fixed,
+ []
+ )
+
+ fixed = {
+ telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_TEXT,
+ telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT)
+ }
+ self._implement_channel_class(
+ telepathy.CHANNEL_TYPE_TEXT,
+ self._get_text_channel,
+ fixed,
+ []
+ )
+
+ fixed = {
+ telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_FILE_TRANSFER,
+ telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT)
+ }
+ self._implement_channel_class(
+ telepathy.CHANNEL_TYPE_FILE_TRANSFER,
+ self._get_file_transfer_channel,
+ fixed,
+ []
+ )
+
+ fixed = {
+ telepathy.CHANNEL_INTERFACE + '.ChannelType': telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
+ telepathy.CHANNEL_INTERFACE + '.TargetHandleType': dbus.UInt32(telepathy.HANDLE_TYPE_CONTACT)
+ }
+ self._implement_channel_class(
+ telepathy.CHANNEL_TYPE_STREAMED_MEDIA,
+ self._get_media_channel,
+ fixed,
+ [telepathy.CHANNEL_INTERFACE + '.TargetHandle']
+ )
+
+ def _get_list_channel(self, props):
+ _, surpress_handler, h = self._get_type_requested_handle(props)
+
+ _moduleLogger.debug('New contact list channel')
+ chan = channel.contact_list.create_contact_list_channel(self._conn, self, props, h)