fixing weird behavior of backlog fetching
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 30 Mar 2009 22:53:20 +0000 (00:53 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 30 Mar 2009 22:53:20 +0000 (00:53 +0200)
src/client/bufferviewoverlay.cpp
src/client/bufferviewoverlay.h
src/client/client.cpp
src/client/client.h

index 66dec13..cba8035 100644 (file)
@@ -108,6 +108,9 @@ void BufferViewOverlay::update() {
 }
 
 void BufferViewOverlay::updateHelper() {
 }
 
 void BufferViewOverlay::updateHelper() {
+  if(!_aboutToUpdate)
+    return;
+
   bool changed = false;
 
   bool addBuffersAutomatically = false;
   bool changed = false;
 
   bool addBuffersAutomatically = false;
@@ -162,6 +165,9 @@ void BufferViewOverlay::updateHelper() {
       if(minimumActivity == -1 || config->minimumActivity() < minimumActivity)
         minimumActivity = config->minimumActivity();
     }
       if(minimumActivity == -1 || config->minimumActivity() < minimumActivity)
         minimumActivity = config->minimumActivity();
     }
+    QSet<BufferId> availableBuffers = Client::networkModel()->allBufferIds().toSet();
+    buffers.intersect(availableBuffers);
+    tempRemovedBuffers.intersect(availableBuffers);
   }
 
   changed |= (addBuffersAutomatically != _addBuffersAutomatically);
   }
 
   changed |= (addBuffersAutomatically != _addBuffersAutomatically);
@@ -182,6 +188,8 @@ void BufferViewOverlay::updateHelper() {
   _removedBuffers = removedBuffers;
   _tempRemovedBuffers = tempRemovedBuffers;
 
   _removedBuffers = removedBuffers;
   _tempRemovedBuffers = tempRemovedBuffers;
 
+  _aboutToUpdate = false;
+
   if(changed)
     emit hasChanged();
 }
   if(changed)
     emit hasChanged();
 }
@@ -189,6 +197,50 @@ void BufferViewOverlay::updateHelper() {
 void BufferViewOverlay::customEvent(QEvent *event) {
   if(event->type() == _updateEventId) {
     updateHelper();
 void BufferViewOverlay::customEvent(QEvent *event) {
   if(event->type() == _updateEventId) {
     updateHelper();
-    _aboutToUpdate = false;
   }
 }
   }
 }
+
+bool BufferViewOverlay::allNetworks() {
+  updateHelper();
+  return _networkIds.contains(NetworkId());
+}
+
+const QSet<NetworkId> &BufferViewOverlay::networkIds() {
+  updateHelper();
+  return _networkIds;
+}
+
+const QSet<BufferId> &BufferViewOverlay::bufferIds() {
+  updateHelper();
+  return _buffers;
+}
+
+const QSet<BufferId> &BufferViewOverlay::removedBufferIds() {
+  updateHelper();
+  return _removedBuffers;
+}
+
+const QSet<BufferId> &BufferViewOverlay::tempRemovedBufferIds() {
+  updateHelper();
+  return _tempRemovedBuffers;
+}
+
+bool BufferViewOverlay::addBuffersAutomatically() {
+  updateHelper();
+  return _addBuffersAutomatically;
+}
+
+bool BufferViewOverlay::hideInactiveBuffers() {
+  updateHelper();
+  return _hideInactiveBuffers;
+}
+
+int BufferViewOverlay::allowedBufferTypes() {
+  updateHelper();
+  return _allowedBufferTypes;
+}
+
+int BufferViewOverlay::minimumActivity() {
+  updateHelper();
+  return _minimumActivity;
+}
index 483a330..70fb927 100644 (file)
@@ -34,17 +34,17 @@ class BufferViewOverlay : public QObject {
 public:
   BufferViewOverlay(QObject *parent = 0);
 
 public:
   BufferViewOverlay(QObject *parent = 0);
 
-  inline bool allNetworks() const { return _networkIds.contains(NetworkId()); }
+  bool allNetworks();
 
 
-  inline const QSet<NetworkId> &networkIds() const { return _networkIds; }
-  inline const QSet<BufferId> &bufferIds() const { return _buffers; }
-  inline const QSet<BufferId> &removedBufferIds() const { return _removedBuffers; }
-  inline const QSet<BufferId> &tempRemovedBufferIds() const { return _tempRemovedBuffers; }
+  const QSet<NetworkId> &networkIds();
+  const QSet<BufferId> &bufferIds();
+  const QSet<BufferId> &removedBufferIds();
+  const QSet<BufferId> &tempRemovedBufferIds();
 
 
-  inline bool addBuffersAutomatically() const { return _addBuffersAutomatically; }
-  inline bool hideInactiveBuffers() const { return _hideInactiveBuffers; }
-  inline int allowedBufferTypes() const { return _allowedBufferTypes; }
-  inline int minimumActivity() const { return _minimumActivity; }
+  bool addBuffersAutomatically();
+  bool hideInactiveBuffers();
+  int allowedBufferTypes();
+  int minimumActivity();
 
 public slots:
   void addView(int viewId);
 
 public slots:
   void addView(int viewId);
index d04e258..741388c 100644 (file)
@@ -97,7 +97,6 @@ Client::Client(QObject *parent)
     _debugLog(&_debugLogBuffer)
 {
   _signalProxy->synchronize(_ircListHelper);
     _debugLog(&_debugLogBuffer)
 {
   _signalProxy->synchronize(_ircListHelper);
-  connect(this, SIGNAL(requestInitialBacklog()), _backlogManager, SLOT(requestInitialBacklog()), Qt::QueuedConnection);
 }
 
 Client::~Client() {
 }
 
 Client::~Client() {
@@ -323,7 +322,7 @@ void Client::setSyncedToCore() {
   Q_ASSERT(!_bufferViewManager);
   _bufferViewManager = new ClientBufferViewManager(signalProxy(), this);
   connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView()));
   Q_ASSERT(!_bufferViewManager);
   _bufferViewManager = new ClientBufferViewManager(signalProxy(), this);
   connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView()));
-  connect(bufferViewManager(), SIGNAL(viewsInitialized()), this, SLOT(requestInitialBacklogBarrier()));
+  connect(bufferViewManager(), SIGNAL(viewsInitialized()), this, SLOT(requestInitialBacklog()));
 
   // create AliasManager
   Q_ASSERT(!_aliasManager);
 
   // create AliasManager
   Q_ASSERT(!_aliasManager);
@@ -336,16 +335,16 @@ void Client::setSyncedToCore() {
   emit coreConnectionStateChanged(true);
 }
 
   emit coreConnectionStateChanged(true);
 }
 
-void Client::requestInitialBacklogBarrier() {
+void Client::requestInitialBacklog() {
   // usually it _should_ take longer until the bufferViews are initialized, so that's what
   // triggers this slot. But we have to make sure that we know all buffers yet.
   // so we check the BufferSyncer and in case it wasn't initialized we wait for that instead
   if(!bufferSyncer()->isInitialized()) {
   // usually it _should_ take longer until the bufferViews are initialized, so that's what
   // triggers this slot. But we have to make sure that we know all buffers yet.
   // so we check the BufferSyncer and in case it wasn't initialized we wait for that instead
   if(!bufferSyncer()->isInitialized()) {
-    disconnect(bufferViewManager(), SIGNAL(viewsInitialized()), this, SLOT(requestInitialBacklogBarrier()));
-    connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklogBarrier()));
+    disconnect(bufferViewManager(), SIGNAL(viewsInitialized()), this, SLOT(requestInitialBacklog()));
+    connect(bufferSyncer(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog()));
     return;
   }
     return;
   }
-  emit requestInitialBacklog();
+  _backlogManager->requestInitialBacklog();
 }
 
 void Client::createDefaultBufferView() {
 }
 
 void Client::createDefaultBufferView() {
index 0c9922a..4787731 100644 (file)
@@ -131,7 +131,6 @@ public:
   static inline void registerClientSyncer(ClientSyncer *syncer) { emit instance()->newClientSyncer(syncer); }
 
 signals:
   static inline void registerClientSyncer(ClientSyncer *syncer) { emit instance()->newClientSyncer(syncer); }
 
 signals:
-  void requestInitialBacklog();
   void requestNetworkStates();
 
   void showConfigWizard(const QVariantMap &coredata);
   void requestNetworkStates();
 
   void showConfigWizard(const QVariantMap &coredata);
@@ -189,7 +188,7 @@ private slots:
 
   void setConnectedToCore(AccountId id, QIODevice *socket = 0);
   void setSyncedToCore();
 
   void setConnectedToCore(AccountId id, QIODevice *socket = 0);
   void setSyncedToCore();
-  void requestInitialBacklogBarrier();
+  void requestInitialBacklog();
   void createDefaultBufferView();
 
   void sendBufferedUserInput();
   void createDefaultBufferView();
 
   void sendBufferedUserInput();