+#include "abstractmessageprocessor.h"
+#include "backlogrequester.h"
+#include "backlogsettings.h"
+#include "client.h"
+#include "util.h"
+
+ClientBacklogManager::ClientBacklogManager(QObject* parent)
+ : BacklogManager(parent)
+{}
+
+QVariantList ClientBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional)
+{
+ _buffersRequested << bufferId;
+ return BacklogManager::requestBacklog(bufferId, first, last, limit, additional);
+}
+
+void ClientBacklogManager::receiveBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional, QVariantList msgs)
+{
+ Q_UNUSED(first)
+ Q_UNUSED(last)
+ Q_UNUSED(limit)
+ Q_UNUSED(additional)
+
+ emit messagesReceived(bufferId, msgs.count());
+
+ MessageList msglist;
+ foreach (QVariant v, msgs) {
+ Message msg = v.value<Message>();
+ msg.setFlags(msg.flags() | Message::Backlog);
+ msglist << msg;
+ }
+
+ if (isBuffering()) {
+ bool lastPart = !_requester->buffer(bufferId, msglist);
+ updateProgress(_requester->totalBuffers() - _requester->buffersWaiting(), _requester->totalBuffers());
+ if (lastPart) {
+ dispatchMessages(_requester->bufferedMessages(), true);
+ _requester->flushBuffer();
+ }
+ }
+ else {
+ dispatchMessages(msglist);
+ }
+}
+
+void ClientBacklogManager::receiveBacklogAll(MsgId first, MsgId last, int limit, int additional, QVariantList msgs)
+{
+ Q_UNUSED(first)
+ Q_UNUSED(last)
+ Q_UNUSED(limit)
+ Q_UNUSED(additional)
+
+ MessageList msglist;
+ foreach (QVariant v, msgs) {
+ Message msg = v.value<Message>();
+ msg.setFlags(msg.flags() | Message::Backlog);
+ msglist << msg;
+ }
+
+ dispatchMessages(msglist);
+}
+
+void ClientBacklogManager::requestInitialBacklog()