From 88072a985a01ed3841aeb4394d641b1d28bc33dd Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 15 Aug 2014 16:20:43 +0200 Subject: [PATCH] SyncEngine & UI: Move QElapsedTimer to object Using a function static is too dangerous when multiple threads are involved. --- src/mirall/syncengine.cpp | 16 +++++++++------- src/mirall/syncengine.h | 4 +++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mirall/syncengine.cpp b/src/mirall/syncengine.cpp index 544b37a690..4c5ad4df3f 100644 --- a/src/mirall/syncengine.cpp +++ b/src/mirall/syncengine.cpp @@ -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(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); } diff --git a/src/mirall/syncengine.h b/src/mirall/syncengine.h index e31a920c34..88a56381f3 100644 --- a/src/mirall/syncengine.h +++ b/src/mirall/syncengine.h @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include @@ -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(); }