9 _moduleLogger = logging.getLogger("channel_manager")
12 class ChannelManager(object):
14 def __init__(self, connection):
15 self._connRef = weakref.ref(connection)
16 self._listChannels = weakref.WeakValueDictionary()
17 self._textChannels = weakref.WeakValueDictionary()
18 self._callChannels = weakref.WeakValueDictionary()
21 for chan in self._listChannels.values():
22 chan.remove_from_connection()# so that dbus lets it die.
23 for chan in self._textChannels.values():
25 for chan in self._callChannels.values():
28 def channel_for_list(self, handle, suppress_handler=False):
29 if handle in self._listChannels:
30 chan = self._listChannels[handle]
32 if handle.get_type() == telepathy.HANDLE_TYPE_GROUP:
33 chan = channel.contact_list.GroupChannel(self._connRef(), handle)
34 elif handle.get_type() == telepathy.HANDLE_TYPE_CONTACT:
35 chan = channel.contact_list.creat_contact_list_channel(self._connRef(), handle)
37 _moduleLogger.warn("Unknown channel type %r" % handle.get_type())
38 self._listChannels[handle] = chan
39 self._connRef().add_channel(chan, handle, suppress_handler)
42 def channel_for_text(self, handle, suppress_handler=False):
43 if handle in self._textChannels:
44 chan = self._textChannels[handle]
46 _moduleLogger.debug("Requesting new text channel")
47 contact = handle.contact
49 chan = channel.text.TextChannel(self._connRef())
50 self._textChannels[handle] = chan
51 self._connRef().add_channel(chan, handle, suppress_handler)
54 def channel_for_call(self, handle, suppress_handler=False):
55 if handle in self._callChannels:
56 chan = self._callChannels[handle]
58 _moduleLogger.debug("Requesting new call channel")
59 contact = handle.contact
61 chan = channel.call.CallChannel(self._connRef())
62 self._callChannels[handle] = chan
63 self._connRef().add_channel(chan, handle, suppress_handler)