X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fqtuimessageprocessor.cpp;h=f06030d3bf89101e8555661e5647731fb01445c1;hb=31253a98ef87edb8f87ff53270529ed4f7659612;hp=54ee5702f95c97e88429ee9e6294bb420b3c1101;hpb=9950dd55446bedbccba1e7a27c4d042fb896d3c6;p=quassel.git diff --git a/src/qtui/qtuimessageprocessor.cpp b/src/qtui/qtuimessageprocessor.cpp index 54ee5702..f06030d3 100644 --- a/src/qtui/qtuimessageprocessor.cpp +++ b/src/qtui/qtuimessageprocessor.cpp @@ -27,20 +27,51 @@ #include "network.h" QtUiMessageProcessor::QtUiMessageProcessor(QObject *parent) : AbstractMessageProcessor(parent) { + _processing = false; + _processMode = TimerBased; + _processTimer.setInterval(0); + connect(&_processTimer, SIGNAL(timeout()), this, SLOT(processNextMessage())); +} - +void QtUiMessageProcessor::reset() { + if(processMode() == TimerBased) { + if(_processTimer.isActive()) _processTimer.stop(); + _processing = false; + _currentBatch.clear(); + _processQueue.clear(); + } } -void QtUiMessageProcessor::processMessage(Message &msg) { +void QtUiMessageProcessor::process(Message &msg) { checkForHighlight(msg); Client::messageModel()->insertMessage(msg); + postProcess(msg); +} + +void QtUiMessageProcessor::process(QList &msgs) { + _processQueue.append(msgs); + if(!isProcessing()) startProcessing(); } -void QtUiMessageProcessor::processMessages(QList &msgs) { - foreach(Message msg, msgs) { - checkForHighlight(msg); - Client::messageModel()->insertMessage(msg); +void QtUiMessageProcessor::startProcessing() { + if(processMode() == TimerBased) { + if(_currentBatch.isEmpty() && _processQueue.isEmpty()) return; + _processing = true; + if(!_processTimer.isActive()) _processTimer.start(); + } +} + +void QtUiMessageProcessor::processNextMessage() { + if(_currentBatch.isEmpty()) { + if(_processQueue.isEmpty()) { + _processTimer.stop(); + _processing = false; + return; + } + _currentBatch = _processQueue.takeFirst(); } + Message msg = _currentBatch.takeFirst(); + process(msg); } // TODO optimize checkForHighlight