9 class ChannelManager(object):
11 def __init__(self, connection):
12 self._connRef = weakref.ref(connection)
13 self._listChannels = weakref.WeakValueDictionary()
14 self._textChannels = weakref.WeakValueDictionary()
15 self._callChannels = weakref.WeakValueDictionary()
18 for chan in self._listChannels.values():
19 chan.remove_from_connection()# so that dbus lets it die.
20 for chan in self._textChannels.values():
22 for chan in self._callChannels.values():
25 def channel_for_list(self, handle, suppress_handler=False):
26 if handle in self._listChannels:
27 chan = self._listChannels[handle]
29 if handle.get_type() == telepathy.HANDLE_TYPE_GROUP:
30 chan = channel.contact_list.GroupChannel(self._connRef(), handle)
31 elif handle.get_type() == telepathy.HANDLE_TYPE_CONTACT:
32 chan = channel.contact_list.creat_contact_list_channel(self._connRef(), handle)
34 logging.warn("Unknown channel type %r" % handle.get_type())
35 self._listChannels[handle] = chan
36 self._connRef().add_channel(chan, handle, suppress_handler)
39 def channel_for_text(self, handle, conversation=None, suppress_handler=False):
40 if handle in self._textChannels:
41 chan = self._textChannels[handle]
43 logging.debug("Requesting new text channel")
44 contact = handle.contact
46 if conversation is None:
47 client = self._connRef().msn_client
49 chan = channel.text.TextChannel(self._connRef(), conversation)
50 self._textChannels[handle] = chan
51 self._connRef().add_channel(chan, handle, suppress_handler)
54 def channel_forcall(self, handle, conversation=None, suppress_handler=False):
55 if handle in self._callChannels:
56 chan = self._callChannels[handle]
58 logging.debug("Requesting new call channel")
59 contact = handle.contact
61 if conversation is None:
62 client = self._connRef().msn_client
64 chan = channel.call.CallChannel(self._connRef(), conversation)
65 self._callChannels[handle] = chan
66 self._connRef().add_channel(chan, handle, suppress_handler)