Testing the new SyncObjects concept - looking good so far
[quassel.git] / src / client / clientbacklogmanager.cpp
index fc82d20..f579e60 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <QDebug>
 
+INIT_SYNCABLE_OBJECT(ClientBacklogManager)
 ClientBacklogManager::ClientBacklogManager(QObject *parent)
   : BacklogManager(parent),
     _requester(0)
@@ -37,7 +38,6 @@ ClientBacklogManager::ClientBacklogManager(QObject *parent)
 
 QVariantList ClientBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional) {
   _buffersRequested << bufferId;
-  qDebug() << _buffersRequested;
   return BacklogManager::requestBacklog(bufferId, first, last, limit, additional);
 }
 
@@ -57,7 +57,8 @@ void ClientBacklogManager::receiveBacklog(BufferId bufferId, MsgId first, MsgId
     bool lastPart = !_requester->buffer(bufferId, msglist);
     updateProgress(_requester->totalBuffers() - _requester->buffersWaiting(), _requester->totalBuffers());
     if(lastPart) {
-      stopBuffering();
+      dispatchMessages(_requester->bufferedMessages(), true);
+      _requester->flushBuffer();
     }
   } else {
     dispatchMessages(msglist);
@@ -78,7 +79,7 @@ void ClientBacklogManager::receiveBacklogAll(MsgId first, MsgId last, int limit,
 }
 
 void ClientBacklogManager::requestInitialBacklog() {
-  if(_requester) {
+  if(_requester && !_buffersRequested.isEmpty()) {
     qWarning() << "ClientBacklogManager::requestInitialBacklog() called twice in the same session! (Backlog has already been requested)";
     return;
   }
@@ -104,9 +105,11 @@ void ClientBacklogManager::requestInitialBacklog() {
 
 BufferIdList ClientBacklogManager::filterNewBufferIds(const BufferIdList &bufferIds) {
   BufferIdList newBuffers;
+  QSet<BufferId> availableBuffers = Client::networkModel()->allBufferIds().toSet();
   foreach(BufferId bufferId, bufferIds) {
-    if(!_buffersRequested.contains(bufferId))
-      newBuffers << bufferId;
+    if(_buffersRequested.contains(bufferId) || !availableBuffers.contains(bufferId))
+      continue;
+    newBuffers << bufferId;
   }
   return newBuffers;
 }
@@ -131,11 +134,6 @@ void ClientBacklogManager::checkForBacklog(const QList<BufferId> &bufferIds) {
   };
 }
 
-void ClientBacklogManager::stopBuffering() {
-  Q_ASSERT(_requester);
-  dispatchMessages(_requester->bufferedMessages(), true);
-}
-
 bool ClientBacklogManager::isBuffering() {
   return _requester && _requester->isBuffering();
 }