From 0d3d7a861472313710b51c8d19e81af56e2208a1 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Thu, 7 Aug 2008 02:41:51 +0200 Subject: [PATCH 1/1] Display and update message processing progress --- src/qtui/qtuimessageprocessor.cpp | 25 +++++++++++++++++++++++++ src/qtui/qtuimessageprocessor.h | 4 ++++ 2 files changed, 29 insertions(+) diff --git a/src/qtui/qtuimessageprocessor.cpp b/src/qtui/qtuimessageprocessor.cpp index f06030d3..a9209ae7 100644 --- a/src/qtui/qtuimessageprocessor.cpp +++ b/src/qtui/qtuimessageprocessor.cpp @@ -26,7 +26,10 @@ #include "messagemodel.h" #include "network.h" +const int progressUpdateDelay = 100; // ms between progress signal updates + QtUiMessageProcessor::QtUiMessageProcessor(QObject *parent) : AbstractMessageProcessor(parent) { + _msgsProcessed = _msgCount = 0; _processing = false; _processMode = TimerBased; _processTimer.setInterval(0); @@ -50,13 +53,19 @@ void QtUiMessageProcessor::process(Message &msg) { void QtUiMessageProcessor::process(QList &msgs) { _processQueue.append(msgs); + _msgCount += msgs.count(); if(!isProcessing()) startProcessing(); + else updateProgress(); } void QtUiMessageProcessor::startProcessing() { if(processMode() == TimerBased) { if(_currentBatch.isEmpty() && _processQueue.isEmpty()) return; _processing = true; + _msgsProcessed = 0; + _msgCount = _currentBatch.count(); + foreach(QList msglist, _processQueue) _msgCount += msglist.count(); + updateProgress(); if(!_processTimer.isActive()) _processTimer.start(); } } @@ -66,12 +75,28 @@ void QtUiMessageProcessor::processNextMessage() { if(_processQueue.isEmpty()) { _processTimer.stop(); _processing = false; + _msgsProcessed = _msgCount = 0; + updateProgress(); return; } _currentBatch = _processQueue.takeFirst(); } Message msg = _currentBatch.takeFirst(); process(msg); + _msgsProcessed++; + updateProgress(); +} + +void QtUiMessageProcessor::updateProgress(bool start) { + if(start) { + _progressTimer.start(); + emit progressUpdated(_msgsProcessed, _msgCount); + } else { + if(_msgCount == 0 || _progressTimer.elapsed() >= progressUpdateDelay) { + _progressTimer.restart(); + emit progressUpdated(_msgsProcessed, _msgCount); + } + } } // TODO optimize checkForHighlight diff --git a/src/qtui/qtuimessageprocessor.h b/src/qtui/qtuimessageprocessor.h index 53d4f021..553d5800 100644 --- a/src/qtui/qtuimessageprocessor.h +++ b/src/qtui/qtuimessageprocessor.h @@ -21,6 +21,7 @@ #ifndef QTUIMESSAGEPROCESSOR_H_ #define QTUIMESSAGEPROCESSOR_H_ +#include #include #include "abstractmessageprocessor.h" @@ -51,12 +52,15 @@ class QtUiMessageProcessor : public AbstractMessageProcessor { private: void checkForHighlight(Message &msg); void startProcessing(); + void updateProgress(bool start = false); QList > _processQueue; QList _currentBatch; QTimer _processTimer; bool _processing; Mode _processMode; + int _msgsProcessed, _msgCount; + QTime _progressTimer; }; #endif -- 2.20.1