X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fchannel%2Fcall.py;h=bdd82dc1cb2951acd8ab6bcb4bd1bc92d8326c75;hb=17ed78514215ad8e1358e329fb2e77ad749fe777;hp=a2f2ef3a99c8c00c9439324eb43aa66311267f67;hpb=4991e7a362e17a166f34fe1da0f32edf94de95c3;p=theonering diff --git a/src/channel/call.py b/src/channel/call.py index a2f2ef3..bdd82dc 100644 --- a/src/channel/call.py +++ b/src/channel/call.py @@ -103,10 +103,6 @@ class CallChannel( tp.ChannelTypeStreamedMedia.Close(self) self.remove_from_connection() - if self.__calledNumber is not None: - _moduleLogger.debug("Cancelling call") - self._conn.session.backend.cancel(self.__calledNumber) - @misc_utils.log_exception(_moduleLogger) def GetLocalPendingMembersWithInfo(self): info = dbus.Array([], signature="(uuus)") @@ -162,13 +158,9 @@ class CallChannel( """ contact = self._conn.get_handle_by_id(telepathy.constants.HANDLE_TYPE_CONTACT, contactId) assert self.__contactHandle == contact, "%r != %r" % (self.__contactHandle, contact) - contactNumber = contact.phoneNumber - self.__calledNumber = contactNumber - self.CallStateChanged(self.__contactHandle, telepathy.constants.CHANNEL_CALL_STATE_RINGING) - self._conn.session.backend.call(contactNumber) - self._delayedClose.start(seconds=0) - self.CallStateChanged(self.__contactHandle, telepathy.constants.CHANNEL_CALL_STATE_FORWARDED) + le = gobject_utils.AsyncLinearExecution(self._conn.session.pool, self._call) + le.start(contact) streamId = 0 streamState = telepathy.constants.MEDIA_STREAM_STATE_CONNECTED @@ -177,6 +169,34 @@ class CallChannel( return [(streamId, contact, streamTypes[0], streamState, streamDirection, pendingSendFlags)] @misc_utils.log_exception(_moduleLogger) + def _call(self, contact): + contactNumber = contact.phoneNumber + + self.__calledNumber = contactNumber + self.CallStateChanged(self.__contactHandle, telepathy.constants.CHANNEL_CALL_STATE_RINGING) + + self._delayedClose.start(seconds=0) + self.CallStateChanged(self.__contactHandle, telepathy.constants.CHANNEL_CALL_STATE_FORWARDED) + + try: + result = yield ( + self._conn.session.backend.call, + (contactNumber, ), + {}, + ) + except Exception, e: + _moduleLogger.exception("While placing call to %s" % (self.__calledNumber, )) + self._conn.force_log_display() + accountNumber = misc_utils.normalize_number(self._conn.session.backend.get_account_number()) + self._conn.log_to_user( + __name__, + "Error while placing call from %s to %s:\n%s" % ( + accountNumber, self.__calledNumber, str(e) + ) + ) + return + + @misc_utils.log_exception(_moduleLogger) def GetCallStates(self): """ For org.freedesktop.Telepathy.Channel.Interface.CallState @@ -207,11 +227,9 @@ class CallChannel( if not Hold: return _moduleLogger.debug("Closing without cancel to get out of users way") - self.__calledNumber = None self.close() @misc_utils.log_exception(_moduleLogger) def _on_close_requested(self, *args): _moduleLogger.debug("Cancel now disallowed") - self.__calledNumber = None self.close()