X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientbacklogmanager.cpp;h=519135a0867ecb0569d2fca43e15b7721331c3c1;hp=ce22e33780c12e8f2b6bf444ff21a979cf376f6e;hb=ea372dac8dda146255c7232922904e9f90a0d7f9;hpb=3be0b60bc79f9de4c5428ce2972599b2c03f8cc4 diff --git a/src/client/clientbacklogmanager.cpp b/src/client/clientbacklogmanager.cpp index ce22e337..519135a0 100644 --- a/src/client/clientbacklogmanager.cpp +++ b/src/client/clientbacklogmanager.cpp @@ -27,12 +27,12 @@ #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,10 +46,29 @@ 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; + 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();