diff --git a/dialer/src/call-manager.cpp b/dialer/src/call-manager.cpp index de917d9a..aadca07b 100644 --- a/dialer/src/call-manager.cpp +++ b/dialer/src/call-manager.cpp @@ -42,6 +42,14 @@ CallManager::CallManager(const Tp::CallChannelPtr &callChannel, DialerUtils *dia connect(callChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); + connect(d->dialerUtils, &DialerUtils::acceptCall, this, &CallManager::onCallAccepted); + connect(d->dialerUtils, &DialerUtils::rejectCall, this, &CallManager::onCallRejected); + connect(d->dialerUtils, &DialerUtils::hangUp, this, &CallManager::onHangUpRequested); + connect(d->callChannel.data(), &Tp::CallChannel::invalidated, this, [=]() { + qDebug() << "Channel invalidated"; + d->dialerUtils->setCallState("idle"); + }); + //create the channel handler // d->channelHandler = new CallChannelHandler(callChannel, this); @@ -96,8 +104,7 @@ void CallManager::onCallStateChanged(Tp::CallState state) // d->callWindow.data()->setStatus(CallWindow::StatusRemoteRinging); } else { d->dialerUtils->setCallState("incoming"); - connect(d->dialerUtils, &DialerUtils::acceptCall, this, &CallManager::onCallAccepted); - connect(d->dialerUtils, &DialerUtils::rejectCall, this, &CallManager::onCallRejected); + //show approver; (void) d->callChannel->setRinging(); } @@ -162,6 +169,20 @@ void CallManager::onCallRejected() (void) d->callChannel->hangup(Tp::CallStateChangeReasonRejected, TP_QT_ERROR_REJECTED); } +void CallManager::onHangUpRequested() +{ + if (d->callChannel && d->callChannel->isValid()) { + qDebug() << "Hanging up"; + Tp::PendingOperation *op = d->callChannel->hangup(); + connect(op, &Tp::PendingOperation::finished, [=]() { + if (op->isError()) { + qWarning() << "Unable to hang up:" << op->errorMessage(); + } +// d->callChannel->requestClose(); + }); + } +} + void CallManager::ensureCallWindow() { // if (!d->callWindow) { diff --git a/dialer/src/call-manager.h b/dialer/src/call-manager.h index ae35c103..7e44eabb 100644 --- a/dialer/src/call-manager.h +++ b/dialer/src/call-manager.h @@ -33,6 +33,7 @@ private Q_SLOTS: void onCallStateChanged(Tp::CallState state); void onCallAccepted(); void onCallRejected(); + void onHangUpRequested(); private: void ensureCallWindow();