X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientbacklogmanager.cpp;h=519135a0867ecb0569d2fca43e15b7721331c3c1;hp=86b1b1c17770931289a1d7339182b7cc5bc9bd87;hb=ea372dac8dda146255c7232922904e9f90a0d7f9;hpb=8ec76e512d20ce5d1dc76de556bb98a06b75d695 diff --git a/src/client/clientbacklogmanager.cpp b/src/client/clientbacklogmanager.cpp index 86b1b1c1..519135a0 100644 --- a/src/client/clientbacklogmanager.cpp +++ b/src/client/clientbacklogmanager.cpp @@ -19,17 +19,57 @@ ***************************************************************************/ #include "clientbacklogmanager.h" + +#include "abstractmessageprocessor.h" +#include "backlogrequester.h" #include "client.h" #include ClientBacklogManager::ClientBacklogManager(QObject *parent) - : BacklogManager(parent) + : BacklogManager(parent), + _buffer(true) { } void ClientBacklogManager::receiveBacklog(BufferId bufferId, int lastMsgs, int offset, QVariantList msgs) { Q_UNUSED(lastMsgs) Q_UNUSED(offset) - emit backlog(bufferId, msgs); + + if(msgs.isEmpty()) + return; + + //QTime start = QTime::currentTime(); + QList msglist; + foreach(QVariant v, msgs) { + Message msg = v.value(); + msg.setFlags(msg.flags() | Message::Backlog); + msglist << msg; + } + + if(_buffer) { + _messageBuffer << msglist; + _buffersWaiting.remove(bufferId); + if(_buffersWaiting.isEmpty()) { + _buffer = false; + qSort(_messageBuffer); + Client::messageProcessor()->process(_messageBuffer); + _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(); }