- int idx = indexForId(msglist.first().msgId());
- beginInsertRows(QModelIndex(), idx, idx+msglist.count()-1);
+ Q_ASSERT(!msglist.isEmpty()); // the msglist can be assumed to be non empty
+ int start = indexForId(msglist.first().msgId());
+ int end = start + msglist.count() - 1;
+ MessageModelItem *dayChangeItem = 0;
+
+ if(start > 0) {
+ // check if the preceeding msg is a daychange message and if so if
+ // we have to drop or relocate it at the end of this chunk
+ int prevIdx = start - 1;
+ if(_messageList.at(prevIdx)->msgType() == Message::DayChange
+ && _messageList.at(prevIdx)->timeStamp() > msglist.at(0).timestamp()) {
+ beginRemoveRows(QModelIndex(), prevIdx, prevIdx);
+ MessageModelItem *oldItem = _messageList.takeAt(prevIdx);
+ if(msglist.last().timestamp() < oldItem->timeStamp()) {
+ // we have to reinsert it (with changed msgId -> thus we need to recreate it)
+ Message dayChangeMsg = Message::ChangeOfDay(oldItem->timeStamp());
+ dayChangeMsg.setMsgId(msglist.last().msgId());
+ dayChangeItem = createMessageModelItem(dayChangeMsg);
+ }
+ delete oldItem;
+ endRemoveRows();
+ start--;
+ end--;
+ }
+ }