import channel
+_moduleLogger = logging.getLogger("channel_manager")
+
+
class ChannelManager(object):
def __init__(self, connection):
def close(self):
for chan in self._listChannels.values():
- chan.remove_from_connection()# so that dbus lets it die.
+ chan.Close()
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:
+ try:
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())
+ except KeyError, e:
+ if handle.get_type() != telepathy.HANDLE_TYPE_LIST:
+ raise telepathy.errors.NotImplemented("Only server lists are allowed")
+ _moduleLogger.debug("Requesting new contact list channel")
+
+ chan = channel.contact_list.create_contact_list_channel(self._connRef(), handle)
self._listChannels[handle] = chan
self._connRef().add_channel(chan, handle, suppress_handler)
return chan
- def channel_for_text(self, handle, conversation=None, suppress_handler=False):
- if handle in self._textChannels:
+ def channel_for_text(self, handle, suppress_handler=False):
+ try:
chan = self._textChannels[handle]
- else:
- logging.debug("Requesting new text channel")
- contact = handle.contact
+ except KeyError, e:
+ if handle.get_type() != telepathy.HANDLE_TYPE_CONTACT:
+ raise telepathy.errors.NotImplemented("Only Contacts are allowed")
+ _moduleLogger.debug("Requesting new text channel")
- if conversation is None:
- client = self._connRef().msn_client
- conversation = None
- chan = channel.text.TextChannel(self._connRef(), conversation)
+ chan = channel.text.TextChannel(self._connRef(), handle)
self._textChannels[handle] = chan
self._connRef().add_channel(chan, handle, suppress_handler)
return chan
- def channel_forcall(self, handle, conversation=None, suppress_handler=False):
- if handle in self._callChannels:
+ def channel_for_call(self, handle, suppress_handler=False):
+ try:
chan = self._callChannels[handle]
- else:
- logging.debug("Requesting new call channel")
- contact = handle.contact
+ except KeyError, e:
+ if handle.get_type() != telepathy.HANDLE_TYPE_NONE:
+ raise telepathy.errors.NotImplemented("Using deprecated means to create a call")
+ _moduleLogger.debug("Requesting new call channel")
- if conversation is None:
- client = self._connRef().msn_client
- conversation = None
- chan = channel.call.CallChannel(self._connRef(), conversation)
+ chan = channel.call.CallChannel(self._connRef(), handle)
self._callChannels[handle] = chan
self._connRef().add_channel(chan, handle, suppress_handler)
return chan