X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebacklogmanager.cpp;h=5e3724f3cd984c72ed2c5fcd9968f0900910a549;hp=bd1bc4f4a2e7c07541101d40f659ef95a56d85d6;hb=335e1e55ee8df69b37b1b4d839950ced9ac08cc4;hpb=de1619ce11bf386490cdb38bc1be134a391eeaae diff --git a/src/core/corebacklogmanager.cpp b/src/core/corebacklogmanager.cpp index bd1bc4f4..5e3724f3 100644 --- a/src/core/corebacklogmanager.cpp +++ b/src/core/corebacklogmanager.cpp @@ -30,7 +30,7 @@ CoreBacklogManager::CoreBacklogManager(CoreSession *coreSession) { } -QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit) { +QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, int additional) { QVariantList backlog; QList msgList; msgList = Core::requestMsgs(coreSession()->user(), bufferId, first, last, limit); @@ -41,5 +41,64 @@ QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, backlog << qVariantFromValue(*msgIter); msgIter++; } + + if(additional) { + if(first != -1) { + last = first; + } else { + last = -1; + if(!msgList.isEmpty()) { + if(msgList.first().msgId() < msgList.last().msgId()) + last = msgList.first().msgId(); + else + last = msgList.last().msgId(); + } + } + msgList = Core::requestMsgs(coreSession()->user(), bufferId, -1, last, additional); + msgIter = msgList.constBegin(); + msgListEnd = msgList.constEnd(); + while(msgIter != msgListEnd) { + backlog << qVariantFromValue(*msgIter); + msgIter++; + } + } + + return backlog; +} + +QVariantList CoreBacklogManager::requestBacklogAll(MsgId first, MsgId last, int limit, int additional) { + qDebug() << "CoreBacklogManager::requestBacklogAll" << first << last << limit << additional; + QVariantList backlog; + QList msgList; + msgList = Core::requestAllMsgs(coreSession()->user(), first, last, limit); + + QList::const_iterator msgIter = msgList.constBegin(); + QList::const_iterator msgListEnd = msgList.constEnd(); + while(msgIter != msgListEnd) { + backlog << qVariantFromValue(*msgIter); + msgIter++; + } + + if(additional) { + if(first != -1) { + last = first; + } else { + last = -1; + if(!msgList.isEmpty()) { + if(msgList.first().msgId() < msgList.last().msgId()) + last = msgList.first().msgId(); + else + last = msgList.last().msgId(); + } + } + msgList = Core::requestAllMsgs(coreSession()->user(), -1, last, additional); + msgIter = msgList.constBegin(); + msgListEnd = msgList.constEnd(); + while(msgIter != msgListEnd) { + backlog << qVariantFromValue(*msgIter); + msgIter++; + } + } + return backlog; }