SyncEngine & UI: Move QElapsedTimer to object

Using a function static is too dangerous when multiple threads are involved.
This commit is contained in:
Markus Goetz 2014-08-15 16:20:43 +02:00
parent c27f151451
commit 88072a985a
2 changed files with 12 additions and 8 deletions

View File

@ -457,15 +457,17 @@ void UpdateJob::update_job_update_callback (bool local,
const char *dirUrl,
void *userdata)
{
// Don't wanna overload the UI
static QElapsedTimer throttleTimer;
if (throttleTimer.elapsed() < 200) {
return;
}
throttleTimer.restart();
UpdateJob *updateJob = static_cast<Mirall::UpdateJob*>(userdata);
if (updateJob) {
// Don't wanna overload the UI
if (!updateJob->lastUpdateProgressCallbackCall.isValid()) {
updateJob->lastUpdateProgressCallbackCall.restart(); // first call
} else if (updateJob->lastUpdateProgressCallbackCall.elapsed() < 200) {
return;
} else {
updateJob->lastUpdateProgressCallbackCall.restart();
}
QString path = QString::fromUtf8(dirUrl).section('/', -1);
emit updateJob->folderDiscovered(local, path);
}

View File

@ -23,7 +23,7 @@
#include <QString>
#include <QSet>
#include <QMap>
#include <qelapsedtimer.h>
#include <QElapsedTimer>
#include <csync.h>
@ -153,12 +153,14 @@ class UpdateJob : public QObject {
csync_log_callback _log_callback;
int _log_level;
void* _log_userdata;
QElapsedTimer lastUpdateProgressCallbackCall;
Q_INVOKABLE void start() {
csync_set_log_callback(_log_callback);
csync_set_log_level(_log_level);
csync_set_log_userdata(_log_userdata);
_csync_ctx->callbacks.update_callback = update_job_update_callback;
_csync_ctx->callbacks.update_callback_userdata = this;
lastUpdateProgressCallbackCall.invalidate();
emit finished(csync_update(_csync_ctx));
deleteLater();
}