This fixes a bug where it seems to be impossible to delete a buffer.
return bufferIds.toList();
}
return bufferIds.toList();
}
+void BacklogRequester::flushBuffer() {
+ if(!_buffersWaiting.isEmpty()) {
+ qWarning() << Q_FUNC_INFO << "was called before all backlog was received:"
+ << _buffersWaiting.count() << "buffers are waiting.";
+ }
+ _bufferedMessages.clear();
+ _totalBuffers = 0;
+ _buffersWaiting.clear();
+}
+
// ========================================
// FIXED BACKLOG REQUESTER
// ========================================
// ========================================
// FIXED BACKLOG REQUESTER
// ========================================
inline int buffersWaiting() const { return _buffersWaiting.count(); }
inline int totalBuffers() const { return _totalBuffers; }
inline int buffersWaiting() const { return _buffersWaiting.count(); }
inline int totalBuffers() const { return _totalBuffers; }
- //! returns false if it was the last missing backlogpart
- bool buffer(BufferId bufferId, const MessageList &messages);
-
+
+ bool buffer(BufferId bufferId, const MessageList &messages); //! returns false if it was the last missing backlogpart
+
virtual void requestBacklog(const BufferIdList &bufferIds) = 0;
virtual inline void requestInitialBacklog() { requestBacklog(allBufferIds()); }
virtual void requestBacklog(const BufferIdList &bufferIds) = 0;
virtual inline void requestInitialBacklog() { requestBacklog(allBufferIds()); }
+ virtual void flushBuffer();
+
protected:
BufferIdList allBufferIds() const;
inline void setWaitingBuffers(const QList<BufferId> &buffers) { setWaitingBuffers(buffers.toSet()); }
protected:
BufferIdList allBufferIds() const;
inline void setWaitingBuffers(const QList<BufferId> &buffers) { setWaitingBuffers(buffers.toSet()); }
bool lastPart = !_requester->buffer(bufferId, msglist);
updateProgress(_requester->totalBuffers() - _requester->buffersWaiting(), _requester->totalBuffers());
if(lastPart) {
bool lastPart = !_requester->buffer(bufferId, msglist);
updateProgress(_requester->totalBuffers() - _requester->buffersWaiting(), _requester->totalBuffers());
if(lastPart) {
+ dispatchMessages(_requester->bufferedMessages(), true);
+ _requester->flushBuffer();
}
} else {
dispatchMessages(msglist);
}
} else {
dispatchMessages(msglist);
-void ClientBacklogManager::stopBuffering() {
- Q_ASSERT(_requester);
- dispatchMessages(_requester->bufferedMessages(), true);
-}
-
bool ClientBacklogManager::isBuffering() {
return _requester && _requester->isBuffering();
}
bool ClientBacklogManager::isBuffering() {
return _requester && _requester->isBuffering();
}
private:
bool isBuffering();
private:
bool isBuffering();
BufferIdList filterNewBufferIds(const BufferIdList &bufferIds);
void dispatchMessages(const MessageList &messages, bool sort = false);
BufferIdList filterNewBufferIds(const BufferIdList &bufferIds);
void dispatchMessages(const MessageList &messages, bool sort = false);