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, conversation=None, 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 if conversation is None:
50 client = self._connRef().msn_client
52 chan = channel.text.TextChannel(self._connRef(), conversation)
53 self._textChannels[handle] = chan
54 self._connRef().add_channel(chan, handle, suppress_handler)
57 def channel_forcall(self, handle, conversation=None, suppress_handler=False):
58 if handle in self._callChannels:
59 chan = self._callChannels[handle]
61 _moduleLogger.debug("Requesting new call channel")
62 contact = handle.contact
64 if conversation is None:
65 client = self._connRef().msn_client
67 chan = channel.call.CallChannel(self._connRef(), conversation)
68 self._callChannels[handle] = chan
69 self._connRef().add_channel(chan, handle, suppress_handler)