Fixing a bug where telepathy-theonering wasn't included in packages
[theonering] / src / channel_manager.py
index ad6faed..d1e9942 100644 (file)
@@ -1,4 +1,5 @@
 import weakref
+import itertools
 import logging
 
 import telepathy
@@ -6,6 +7,9 @@ import telepathy
 import channel
 
 
+_moduleLogger = logging.getLogger("channel_manager")
+
+
 class ChannelManager(object):
 
        def __init__(self, connection):
@@ -15,53 +19,50 @@ class ChannelManager(object):
                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()
+               for chan in itertools.chain(
+                       self._listChannels.values(), self._textChannels.values(), self._callChannels.values()
+               ):
+                       try:
+                               chan.close()
+                       except Exception:
+                               _moduleLogger.exception("Shutting down %r" % (chan, ))
 
        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_CONTACT:
+                               _moduleLogger.warning("Using deprecated means to create a call")
+                               raise telepathy.errors.NotImplemented("Not implementing depcrecated means")
+                       _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