X-Git-Url: http://git.maemo.org/git/?p=theonering;a=blobdiff_plain;f=src%2Fchannel_manager.py;h=d1e99423e673110be5096d488d1baa317185a577;hp=dfff25907606bc77bc1f4e7d1d25d50366d885dd;hb=02a126316c2b761233aed2d194e61074fc69620b;hpb=ae58a0e7efd07fd97be2289c97cc2d3a53651ca9 diff --git a/src/channel_manager.py b/src/channel_manager.py index dfff259..d1e9942 100644 --- a/src/channel_manager.py +++ b/src/channel_manager.py @@ -1,4 +1,5 @@ import weakref +import itertools import logging import telepathy @@ -18,19 +19,20 @@ 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): try: chan = self._listChannels[handle] except KeyError, e: if handle.get_type() != telepathy.HANDLE_TYPE_LIST: - raise RuntimeError("Unsupported channel type %r" % handle.get_type()) + 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) @@ -43,11 +45,10 @@ class ChannelManager(object): chan = self._textChannels[handle] except KeyError, e: if handle.get_type() != telepathy.HANDLE_TYPE_CONTACT: - raise telepathy.NotImplemented("Only Contacts are allowed") + raise telepathy.errors.NotImplemented("Only Contacts are allowed") _moduleLogger.debug("Requesting new text channel") - contact = handle.contact - chan = channel.text.TextChannel(self._connRef()) + chan = channel.text.TextChannel(self._connRef(), handle) self._textChannels[handle] = chan self._connRef().add_channel(chan, handle, suppress_handler) return chan @@ -57,11 +58,11 @@ class ChannelManager(object): chan = self._callChannels[handle] except KeyError, e: if handle.get_type() != telepathy.HANDLE_TYPE_CONTACT: - raise telepathy.NotImplemented("Only Contacts are allowed") + _moduleLogger.warning("Using deprecated means to create a call") + raise telepathy.errors.NotImplemented("Not implementing depcrecated means") _moduleLogger.debug("Requesting new call channel") - contact = handle.contact - chan = channel.call.CallChannel(self._connRef()) + chan = channel.call.CallChannel(self._connRef(), handle) self._callChannels[handle] = chan self._connRef().add_channel(chan, handle, suppress_handler) return chan