X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientbacklogmanager.cpp;h=b485726d6cf60054583094336c15a867043b0630;hp=ce22e33780c12e8f2b6bf444ff21a979cf376f6e;hb=17fa448705597f9cd7f24a03a630f0cad69d29ee;hpb=332069a1830ed3a055ac6f2d7661bae1cc83e40c diff --git a/src/client/clientbacklogmanager.cpp b/src/client/clientbacklogmanager.cpp index ce22e337..b485726d 100644 --- a/src/client/clientbacklogmanager.cpp +++ b/src/client/clientbacklogmanager.cpp @@ -25,14 +25,15 @@ #include "client.h" #include +#include ClientBacklogManager::ClientBacklogManager(QObject *parent) - : BacklogManager(parent) + : BacklogManager(parent), + _buffer(true) { } void ClientBacklogManager::receiveBacklog(BufferId bufferId, int lastMsgs, int offset, QVariantList msgs) { - Q_UNUSED(bufferId) Q_UNUSED(lastMsgs) Q_UNUSED(offset) @@ -46,11 +47,39 @@ void ClientBacklogManager::receiveBacklog(BufferId bufferId, int lastMsgs, int o msg.setFlags(msg.flags() | Message::Backlog); msglist << msg; } - Client::messageProcessor()->process(msglist); + + if(_buffer) { + _messageBuffer << msglist; + _buffersWaiting.remove(bufferId); + if(_buffersWaiting.isEmpty()) { + _buffer = false; + clock_t start_t = clock(); + qSort(_messageBuffer); + Client::messageProcessor()->process(_messageBuffer); + clock_t end_t = clock(); + qDebug() << "Processed" << _messageBuffer.count() << "Messages in" << (float)(end_t - start_t) / CLOCKS_PER_SEC << "seconds ==" << end_t - start_t << "clocks."; + _messageBuffer.clear(); + } + } else { + Client::messageProcessor()->process(msglist); + } //qDebug() << "processed" << msgs.count() << "backlog lines in" << start.msecsTo(QTime::currentTime()); } +QVariantList ClientBacklogManager::requestBacklog(BufferId bufferId, int lastMsgs, int offset) { + if(_buffer) + _buffersWaiting << bufferId; + + return BacklogManager::requestBacklog(bufferId, lastMsgs, offset); +} + void ClientBacklogManager::requestInitialBacklog() { FixedBacklogRequester backlogRequester(this); backlogRequester.requestBacklog(); } + +void ClientBacklogManager::reset() { + _buffer = true; + _messageBuffer.clear(); + _buffersWaiting.clear(); +}