}
bool inOrder = (msglist.first().msgId() < msglist.last().msgId());
-
- // check if the whole bunch fits in at one position
- if(indexForId(msglist.first().msgId()) == indexForId(msglist.last().msgId())) {
- if(inOrder) {
- insertMessageGroup(msglist);
- } else {
- QList<Message> messages = msglist;
- qSort(messages);
- insertMessageGroup(messages);
- }
- return;
- }
-
// depending on the order we have to traverse from the front to the back or vice versa
// for the sake of performance we have a little code duplication here
// if you need to do some changes here you'll probably need to change them at all
// and give back controll to the eventloop (similar to what the QtUiMessageProcessor used to do)
QList<Message> grouplist;
MsgId id;
+ MsgId dupeId;
bool fastForward = false;
QList<Message>::const_iterator iter;
if(inOrder) {
// DUPE (1 / 3)
int idx = indexForId((*iter).msgId());
+ if(idx >= 0)
+ dupeId = _messageList[idx]->msgId();
// we always compare to the previous entry...
// if there isn't, we can fastforward to the top
if(idx - 1 >= 0) // also safe as we've passed another empty check
id = _messageList[idx - 1]->msgId();
else
fastForward = true;
- grouplist << *iter;
+ if((*iter).msgId() != dupeId)
+ grouplist << *iter;
if(!inOrder)
iter++;
// build new group
int idx = indexForId((*iter).msgId());
+ if(idx >= 0)
+ dupeId = _messageList[idx]->msgId();
if(idx - 1 >= 0)
id = _messageList[idx - 1]->msgId();
else
fastForward = true;
}
- grouplist.prepend(*iter);
+ if((*iter).msgId() != dupeId)
+ grouplist.prepend(*iter);
}
} else {
while(iter != msglist.constEnd()) {
// build new group
int idx = indexForId((*iter).msgId());
+ if(idx >= 0)
+ dupeId = _messageList[idx]->msgId();
if(idx - 1 >= 0)
id = _messageList[idx - 1]->msgId();
else
fastForward = true;
}
- grouplist.prepend(*iter);
+ if((*iter).msgId() != dupeId)
+ grouplist.prepend(*iter);
iter++;
}
}