preventing refetching of backlog which was already pulled inwith the initial request
[quassel.git] / src / client / clientbufferviewmanager.cpp
index 06e8a85..d7cd837 100644 (file)
 
 #include "clientbufferviewmanager.h"
 
+#include "bufferviewoverlay.h"
 #include "clientbufferviewconfig.h"
 
 ClientBufferViewManager::ClientBufferViewManager(SignalProxy *proxy, QObject *parent)
-  : BufferViewManager(proxy, parent),
-    _bufferViewOverlay(0)
+  : BufferViewManager(proxy, parent)
 {
-  connect(this, SIGNAL(bufferViewConfigAdded(int)), this, SLOT(updateBufferViewOverlay()));
-  connect(this, SIGNAL(bufferViewConfigDeleted(int)), this, SLOT(updateBufferViewOverlay()));
+  connect(this, SIGNAL(initDone()), this, SLOT(waitForConfigInit()));
 }
 
 BufferViewConfig *ClientBufferViewManager::bufferViewConfigFactory(int bufferViewConfigId) {
@@ -46,6 +45,27 @@ ClientBufferViewConfig *ClientBufferViewManager::clientBufferViewConfig(int buff
   return static_cast<ClientBufferViewConfig *>(bufferViewConfig(bufferViewId));
 }
 
-void ClientBufferViewManager::updateBufferViewOverlay() {
-  
+void ClientBufferViewManager::waitForConfigInit() {
+  bool initialized = true;
+  foreach(BufferViewConfig *config, bufferViewConfigs()) {
+    initialized &= config->isInitialized();
+    if(config->isInitialized())
+      continue;
+    connect(config, SIGNAL(initDone()), this, SLOT(configInitBarrier()));
+  }
+  if(initialized)
+    emit viewsInitialized();
+}
+
+void ClientBufferViewManager::configInitBarrier() {
+  BufferViewConfig *config = qobject_cast<BufferViewConfig *>(sender());
+  Q_ASSERT(config);
+  disconnect(config, SIGNAL(initDone()), this, SLOT(configInitBarrier()));
+
+  bool initialized = true;
+  foreach(BufferViewConfig *config, bufferViewConfigs()) {
+    initialized &= config->isInitialized();
+  }
+  if(initialized)
+    emit viewsInitialized();
 }