Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[voicecall] Filter out hangup requests if earlier request is still pe…
…nding. Contributes to JB#38105
  • Loading branch information
Joona Petrell committed May 4, 2017
1 parent 6b49ca8 commit f6cb4e7
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions plugins/providers/telepathy/src/streamchannelhandler.cpp
Expand Up @@ -61,7 +61,7 @@ class StreamChannelHandlerPrivate

public:
StreamChannelHandlerPrivate(StreamChannelHandler *q, const QString &id, Tp::StreamedMediaChannelPtr c, const QDateTime &s, TelepathyProvider *p)
: q_ptr(q), handlerId(id), provider(p), startedAt(s), status(AbstractVoiceCallHandler::STATUS_NULL),
: q_ptr(q), pendingHangup(NULL), handlerId(id), provider(p), startedAt(s), status(AbstractVoiceCallHandler::STATUS_NULL),
channel(c), servicePointInterface(NULL), duration(0), durationTimerId(-1), isEmergency(false),
isForwarded(false), isIncoming(false), isRemoteHeld(false)
{ /* ... */ }
Expand Down Expand Up @@ -91,6 +91,7 @@ class StreamChannelHandlerPrivate
}

StreamChannelHandler *q_ptr;
QPointer<Tp::PendingOperation> pendingHangup;

QString handlerId;
QString parentHandlerId;
Expand Down Expand Up @@ -268,9 +269,20 @@ void StreamChannelHandler::hangup()
TRACE
Q_D(StreamChannelHandler);

QObject::connect(d->channel.data()->hangupCall(),
SIGNAL(finished(Tp::PendingOperation*)),
SLOT(onStreamedMediaChannelHangupCallFinished(Tp::PendingOperation*)));
if (d->pendingHangup) {
if (d->pendingHangup->isFinished()) {
d->pendingHangup = NULL;
} else {
DEBUG_T("Filtering out hangup request, earlier request still pending")
}
}

if (!d->pendingHangup) {
d->pendingHangup = d->channel.data()->hangupCall();
QObject::connect(d->pendingHangup,
SIGNAL(finished(Tp::PendingOperation*)),
SLOT(onStreamedMediaChannelHangupCallFinished(Tp::PendingOperation*)));
}
}

void StreamChannelHandler::hold(bool on)
Expand Down Expand Up @@ -559,6 +571,9 @@ void StreamChannelHandler::onStreamedMediaChannelAcceptCallFinished(Tp::PendingO
void StreamChannelHandler::onStreamedMediaChannelHangupCallFinished(Tp::PendingOperation *op)
{
TRACE
Q_D(StreamChannelHandler);
d->pendingHangup = NULL;

if(op->isError())
{
WARNING_T(QString("Operation failed: ") + op->errorName() + ": " + op->errorMessage());
Expand Down Expand Up @@ -669,6 +684,7 @@ void StreamChannelHandler::onStreamedMediaChannelGroupMembersChanged(QString mes
void StreamChannelHandler::onStreamedMediaChannelHoldStateChanged(uint state, uint reason)
{
TRACE
Q_UNUSED(reason)
Q_D(StreamChannelHandler);

switch(state)
Expand Down

0 comments on commit f6cb4e7

Please sign in to comment.