}
if(additional) {
+ MsgId oldestMessage;
+ if(!msgList.isEmpty()) {
+ if(msgList.first().msgId() < msgList.last().msgId())
+ oldestMessage = msgList.first().msgId();
+ else
+ oldestMessage = msgList.last().msgId();
+ }
+
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();
- }
+ last = oldestMessage;
}
- msgList = Core::requestMsgs(coreSession()->user(), bufferId, -1, last, additional);
- msgIter = msgList.constBegin();
- msgListEnd = msgList.constEnd();
- while(msgIter != msgListEnd) {
- backlog << qVariantFromValue(*msgIter);
- msgIter++;
+
+ // only fetch additional messages if they they continue seemlessly
+ // that is, if the list of messages is not truncated by the limit
+ if(last.isValid() && last == oldestMessage) {
+ msgList = Core::requestMsgs(coreSession()->user(), bufferId, -1, last, additional);
+ msgIter = msgList.constBegin();
+ msgListEnd = msgList.constEnd();
+ while(msgIter != msgListEnd) {
+ backlog << qVariantFromValue(*msgIter);
+ msgIter++;
+ }
}
}