From: Shane Synan Date: Thu, 25 Jun 2020 19:37:24 +0000 (-0400) Subject: client: Fix backlog requests with 0 initial fetch X-Git-Tag: 0.14-rc1~35 X-Git-Url: https://git.quassel-irc.org/?a=commitdiff_plain;ds=sidebyside;h=00cc0dfd645cce97c120111f5e5fd4c02ed021c1;p=quassel.git client: Fix backlog requests with 0 initial fetch If no available messages in a buffer exist, try fetching the newest messages. This fixes requesting additional backlog for a buffer when the initial backlog fetching has been disabled (set to zero). --- diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index 76914bff..6c887216 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -393,17 +393,35 @@ void MessageModel::requestBacklog(BufferId bufferId) BacklogSettings backlogSettings; int requestCount = backlogSettings.dynamicBacklogAmount(); + // Assume there's no available messages + MsgId oldestAvailableMsgId{-1}; + + // Try to find the oldest (lowest ID) message belonging to this buffer for (int i = 0; i < messageCount(); i++) { if (messageItemAt(i)->bufferId() == bufferId) { - _messagesWaiting[bufferId] = requestCount; - Client::backlogManager()->emitMessagesRequested(tr("Requesting %1 messages from backlog for buffer %2:%3") - .arg(requestCount) - .arg(Client::networkModel()->networkName(bufferId)) - .arg(Client::networkModel()->bufferName(bufferId))); - Client::backlogManager()->requestBacklog(bufferId, -1, messageItemAt(i)->msgId(), requestCount); - return; + // Match found, use this message ID for requesting more backlog + oldestAvailableMsgId = messageItemAt(i)->msgId(); + break; } } + + // Prepare to fetch messages + _messagesWaiting[bufferId] = requestCount; + Client::backlogManager()->emitMessagesRequested(tr("Requesting %1 messages from backlog for buffer %2:%3") + .arg(requestCount) + .arg(Client::networkModel()->networkName(bufferId)) + .arg(Client::networkModel()->bufferName(bufferId))); + + if (oldestAvailableMsgId.isValid()) { + // Request messages from backlog starting from this message ID, going into the past + Client::backlogManager()->requestBacklog(bufferId, -1, oldestAvailableMsgId, requestCount); + } + else { + // No existing messages could be found. Try to fetch the newest available messages instead. + // This may happen when initial backlog fetching is set to zero, or if no messages exist in + // a buffer. + Client::backlogManager()->requestBacklog(bufferId, -1, -1, requestCount); + } } void MessageModel::messagesReceived(BufferId bufferId, int count)