X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fbacklogrequester.cpp;h=64ed909dd6126b59a773f303256fdbf366e2d2c7;hp=4a1e2863ece86a98acb0b144b52d915f2d7e35bd;hb=HEAD;hpb=695758015a80eb8c158a9ac4c0f1c0b547e70df3 diff --git a/src/client/backlogrequester.cpp b/src/client/backlogrequester.cpp index 4a1e2863..64ed909d 100644 --- a/src/client/backlogrequester.cpp +++ b/src/client/backlogrequester.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -26,83 +26,70 @@ #include "bufferviewoverlay.h" #include "clientbacklogmanager.h" -BacklogRequester::BacklogRequester(bool buffering, RequesterType requesterType, ClientBacklogManager *backlogManager) - : backlogManager(backlogManager), - _isBuffering(buffering), - _requesterType(requesterType), - _totalBuffers(0) +BacklogRequester::BacklogRequester(bool buffering, RequesterType requesterType, ClientBacklogManager* backlogManager) + : backlogManager(backlogManager) + , _isBuffering(buffering) + , _requesterType(requesterType) + , _totalBuffers(0) { Q_ASSERT(backlogManager); } - -void BacklogRequester::setWaitingBuffers(const QSet &buffers) +void BacklogRequester::setWaitingBuffers(const BufferIdList& buffers) { - _buffersWaiting = buffers; - _totalBuffers = _buffersWaiting.count(); + _buffersWaiting = {buffers.begin(), buffers.end()}; + _totalBuffers = int(_buffersWaiting.size()); } - -void BacklogRequester::addWaitingBuffer(BufferId buffer) -{ - _buffersWaiting << buffer; - _totalBuffers++; -} - - -bool BacklogRequester::buffer(BufferId bufferId, const MessageList &messages) +bool BacklogRequester::buffer(BufferId bufferId, const MessageList& messages) { _bufferedMessages << messages; - _buffersWaiting.remove(bufferId); - return !_buffersWaiting.isEmpty(); + _buffersWaiting.erase(bufferId); + return !_buffersWaiting.empty(); } - BufferIdList BacklogRequester::allBufferIds() const { QSet bufferIds = Client::bufferViewOverlay()->bufferIds(); bufferIds += Client::bufferViewOverlay()->tempRemovedBufferIds(); - return bufferIds.toList(); + return bufferIds.values(); } - void BacklogRequester::flushBuffer() { - if (!_buffersWaiting.isEmpty()) { - qWarning() << Q_FUNC_INFO << "was called before all backlog was received:" - << _buffersWaiting.count() << "buffers are waiting."; + if (!_buffersWaiting.empty()) { + qWarning() << Q_FUNC_INFO << "was called before all backlog was received:" << _buffersWaiting.size() << "buffers are waiting."; } _bufferedMessages.clear(); _totalBuffers = 0; _buffersWaiting.clear(); } - // ======================================== // FIXED BACKLOG REQUESTER // ======================================== -FixedBacklogRequester::FixedBacklogRequester(ClientBacklogManager *backlogManager) +FixedBacklogRequester::FixedBacklogRequester(ClientBacklogManager* backlogManager) : BacklogRequester(true, BacklogRequester::PerBufferFixed, backlogManager) { BacklogSettings backlogSettings; _backlogCount = backlogSettings.fixedBacklogAmount(); } - -void FixedBacklogRequester::requestBacklog(const BufferIdList &bufferIds) +void FixedBacklogRequester::requestBacklog(const BufferIdList& bufferIds) { setWaitingBuffers(bufferIds); - backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 backlog messages for %2 buffers").arg(_backlogCount * bufferIds.count()).arg(bufferIds.count())); - foreach(BufferId bufferId, bufferIds) { + backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 backlog messages for %2 buffers") + .arg(_backlogCount * bufferIds.count()) + .arg(bufferIds.count())); + foreach (BufferId bufferId, bufferIds) { backlogManager->requestBacklog(bufferId, -1, -1, _backlogCount); } } - // ======================================== // GLOBAL UNREAD BACKLOG REQUESTER // ======================================== -GlobalUnreadBacklogRequester::GlobalUnreadBacklogRequester(ClientBacklogManager *backlogManager) +GlobalUnreadBacklogRequester::GlobalUnreadBacklogRequester(ClientBacklogManager* backlogManager) : BacklogRequester(false, BacklogRequester::GlobalUnread, backlogManager) { BacklogSettings backlogSettings; @@ -110,24 +97,23 @@ GlobalUnreadBacklogRequester::GlobalUnreadBacklogRequester(ClientBacklogManager _additional = backlogSettings.globalUnreadBacklogAdditional(); } - void GlobalUnreadBacklogRequester::requestInitialBacklog() { MsgId oldestUnreadMessage; - foreach(BufferId bufferId, allBufferIds()) { + foreach (BufferId bufferId, allBufferIds()) { MsgId msgId = Client::networkModel()->lastSeenMsgId(bufferId); if (!oldestUnreadMessage.isValid() || oldestUnreadMessage > msgId) oldestUnreadMessage = msgId; } - backlogManager->emitMessagesRequested(QObject::tr("Requesting up to %1 of all unread backlog messages (plus additional %2)").arg(_limit).arg(_additional)); + backlogManager->emitMessagesRequested( + QObject::tr("Requesting up to %1 of all unread backlog messages (plus additional %2)").arg(_limit).arg(_additional)); backlogManager->requestBacklogAll(oldestUnreadMessage, -1, _limit, _additional); } - // ======================================== // PER BUFFER UNREAD BACKLOG REQUESTER // ======================================== -PerBufferUnreadBacklogRequester::PerBufferUnreadBacklogRequester(ClientBacklogManager *backlogManager) +PerBufferUnreadBacklogRequester::PerBufferUnreadBacklogRequester(ClientBacklogManager* backlogManager) : BacklogRequester(true, BacklogRequester::PerBufferUnread, backlogManager) { BacklogSettings backlogSettings; @@ -135,12 +121,40 @@ PerBufferUnreadBacklogRequester::PerBufferUnreadBacklogRequester(ClientBacklogMa _additional = backlogSettings.perBufferUnreadBacklogAdditional(); } - -void PerBufferUnreadBacklogRequester::requestBacklog(const BufferIdList &bufferIds) +void PerBufferUnreadBacklogRequester::requestBacklog(const BufferIdList& bufferIds) { setWaitingBuffers(bufferIds); - backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 unread backlog messages for %2 buffers").arg((_limit + _additional) * bufferIds.count()).arg(bufferIds.count())); - foreach(BufferId bufferId, bufferIds) { + backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 unread backlog messages for %2 buffers") + .arg((_limit + _additional) * bufferIds.count()) + .arg(bufferIds.count())); + foreach (BufferId bufferId, bufferIds) { backlogManager->requestBacklog(bufferId, Client::networkModel()->lastSeenMsgId(bufferId), -1, _limit, _additional); } } + +// ======================================== +// AS NEEDED BACKLOG REQUESTER +// ======================================== +AsNeededBacklogRequester::AsNeededBacklogRequester(ClientBacklogManager* backlogManager) + : BacklogRequester(false, BacklogRequester::AsNeeded, backlogManager) +{ + BacklogSettings backlogSettings; + _legacyBacklogCount = backlogSettings.asNeededLegacyBacklogAmount(); +} + +void AsNeededBacklogRequester::requestBacklog(const BufferIdList& bufferIds) +{ + // Check if the core supports activity tracking + if (Client::isCoreFeatureEnabled(Quassel::Feature::BufferActivitySync)) { + // Don't fetch any backlog, the core will track buffer activity for us + return; + } + + setWaitingBuffers(bufferIds); + backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 backlog messages for %2 buffers") + .arg(_legacyBacklogCount * bufferIds.count()) + .arg(bufferIds.count())); + foreach (BufferId bufferId, bufferIds) { + backlogManager->requestBacklog(bufferId, -1, -1, _legacyBacklogCount); + } +}