diff --git a/src/core/slavebase.cpp b/src/core/slavebase.cpp --- a/src/core/slavebase.cpp +++ b/src/core/slavebase.cpp @@ -80,7 +80,7 @@ { public: SlaveBase *q; - SlaveBasePrivate(SlaveBase *owner): q(owner), m_passwdServerClient(nullptr) + SlaveBasePrivate(SlaveBase *owner): q(owner), nextTimeoutMsecs(0), m_passwdServerClient(nullptr) { if (!qEnvironmentVariableIsEmpty("KIOSLAVE_ENABLE_TESTMODE")) { QStandardPaths::enableTestMode(true); @@ -110,8 +110,9 @@ KConfigGroup *configGroup; QUrl onHoldUrl; - QDateTime lastTimeout; - QDateTime nextTimeout; + QElapsedTimer lastTimeout; + QElapsedTimer nextTimeout; + qint64 nextTimeoutMsecs; KIO::filesize_t totalSize; KRemoteEncoding *remotefile; enum { Idle, InsideMethod, FinishedCalled, ErrorCalled } m_state; @@ -273,18 +274,18 @@ void SlaveBase::dispatchLoop() { while (!d->exit_loop) { - if (d->nextTimeout.isValid() && (d->nextTimeout < QDateTime::currentDateTime())) { + if (d->nextTimeout.isValid() && (d->nextTimeout.hasExpired(d->nextTimeoutMsecs))) { QByteArray data = d->timeoutData; - d->nextTimeout = QDateTime(); + d->nextTimeout.invalidate(); d->timeoutData = QByteArray(); special(data); } Q_ASSERT(d->appConnection.inited()); int ms = -1; if (d->nextTimeout.isValid()) { - ms = qMax(QDateTime::currentDateTime().msecsTo(d->nextTimeout), 1); + ms = qMax(d->nextTimeout.elapsed() - d->nextTimeoutMsecs, 1); } int ret = -1; @@ -529,22 +530,20 @@ { bool emitSignal = false; - QDateTime now = QDateTime::currentDateTime(); - if (_bytes == d->totalSize) { emitSignal = true; } else { if (d->lastTimeout.isValid()) { - emitSignal = d->lastTimeout.msecsTo(now) >= 100; // emit size 10 times a second + emitSignal = d->lastTimeout.hasExpired(100); // emit size 10 times a second } else { emitSignal = true; } } if (emitSignal) { KIO_DATA << KIO_FILESIZE_T(_bytes); send(INF_PROCESSED_SIZE, data); - d->lastTimeout = now; + d->lastTimeout.start(); } // d->processed_size = _bytes; @@ -1045,12 +1044,15 @@ void SlaveBase::setTimeoutSpecialCommand(int timeout, const QByteArray &data) { + d->nextTimeout.start(); + if (timeout > 0) { - d->nextTimeout = QDateTime::currentDateTime().addSecs(timeout); + d->nextTimeoutMsecs = timeout*1000; // from seconds to miliseconds } else if (timeout == 0) { - d->nextTimeout = QDateTime::currentDateTime().addSecs(1); // Immediate timeout + d->nextTimeoutMsecs = 1000; // Inmediate timeout } else { - d->nextTimeout = QDateTime(); // Canceled + d->nextTimeoutMsecs = 1; + d->nextTimeout.invalidate(); // Canceled } d->timeoutData = data;