Forcing calls to quit immediately rather than giving time to cancel to fix issues...
[theonering] / src / channel / call.py
index 2d3af62..bdd82dc 100644 (file)
@@ -103,10 +103,6 @@ class CallChannel(
                tp.ChannelTypeStreamedMedia.Close(self)
                self.remove_from_connection()
 
-               if self.__calledNumber is not None:
-                       le = gobject_utils.LinearExecution(self._cancel)
-                       le.start()
-
        @misc_utils.log_exception(_moduleLogger)
        def GetLocalPendingMembersWithInfo(self):
                info = dbus.Array([], signature="(uuus)")
@@ -163,7 +159,7 @@ class CallChannel(
                contact = self._conn.get_handle_by_id(telepathy.constants.HANDLE_TYPE_CONTACT, contactId)
                assert self.__contactHandle == contact, "%r != %r" % (self.__contactHandle, contact)
 
-               le = gobject_utils.LinearExecution(self._call)
+               le = gobject_utils.AsyncLinearExecution(self._conn.session.pool, self._call)
                le.start(contact)
 
                streamId = 0
@@ -172,39 +168,32 @@ class CallChannel(
                pendingSendFlags = telepathy.constants.MEDIA_STREAM_PENDING_REMOTE_SEND
                return [(streamId, contact, streamTypes[0], streamState, streamDirection, pendingSendFlags)]
 
-       def _call(self, contact, on_success, on_error):
+       @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)
 
-               try:
-                       result = yield self._conn.session.pool.add_task, (
-                               self._conn.session.backend.call,
-                               (contactNumber, ),
-                               {},
-                               on_success,
-                               on_error,
-                       ), {}
-               except Exception:
-                       _moduleLogger.exception(result)
-                       return
-
                self._delayedClose.start(seconds=0)
                self.CallStateChanged(self.__contactHandle, telepathy.constants.CHANNEL_CALL_STATE_FORWARDED)
 
-       def _cancel(self, on_success, on_error):
-               _moduleLogger.debug("Cancelling call")
                try:
-                       result = yield self._conn.session.pool.add_task, (
-                               self._conn.session.backend.cancel,
-                               (self.__calledNumber, ),
+                       result = yield (
+                               self._conn.session.backend.call,
+                               (contactNumber, ),
                                {},
-                               on_success,
-                               on_error,
-                       ), {}
-               except Exception:
-                       _moduleLogger.exception(result)
+                       )
+               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)
@@ -238,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()