int start = indexForId(msglist.first().msgId());
int end = start + msglist.count() - 1;
Message dayChangeMsg;
-// MessageModelItem *dayChangeItem = 0;
- bool relocatedMsg = false;
+
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(messageItemAt(prevIdx)->msgType() == Message::DayChange
&& messageItemAt(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;
-
-
- dayChangeMsg = takeMessageAt(prevIdx);
- if(msglist.last().timestamp() < dayChangeMsg.timestamp()) {
+ Message oldDayChangeMsg = takeMessageAt(prevIdx);
+ if(msglist.last().timestamp() < oldDayChangeMsg.timestamp()) {
// we have to reinsert it with a changed msgId
+ dayChangeMsg = oldDayChangeMsg;
dayChangeMsg.setMsgId(msglist.last().msgId());
}
endRemoveRows();
+
start--;
end--;
- relocatedMsg = true;
}
}
Q_ASSERT(start == 0 || messageItemAt(start - 1)->msgId() < msglist.first().msgId());
Q_ASSERT(start == messageCount() || messageItemAt(start)->msgId() > msglist.last().msgId());
beginInsertRows(QModelIndex(), start, end);
-// int pos = start;
-// foreach(Message msg, msglist) {
-// _messageList.insert(pos, createMessageModelItem(msg));
-// pos++;
-// }
-// if(dayChangeItem) {
-// _messageList.insert(pos, dayChangeItem);
-// pos++; // needed for the following assert
-// }
insertMessages__(start, msglist);
if(dayChangeMsg.isValid())
insertMessage__(start + msglist.count(), dayChangeMsg);
endInsertRows();
-// Q_ASSERT(start == end || _messageList.at(start)->msgId() != _messageList.at(end)->msgId() || _messageList.at(end)->msgType() == Message::DayChange);
+ Q_ASSERT(start == end || messageItemAt(start)->msgId() != messageItemAt(end)->msgId() || messageItemAt(end)->msgType() == Message::DayChange);
Q_ASSERT(start == 0 || messageItemAt(start - 1)->msgId() < messageItemAt(start)->msgId());
Q_ASSERT(end + 1 == messageCount() || messageItemAt(end)->msgId() < messageItemAt(end + 1)->msgId());
-// Q_ASSERT(pos - 1 == end);
}
int MessageModel::insertMessagesGracefully(const QList<Message> &msglist) {
_nextDayChange = _nextDayChange.addSecs(86400);
}
+void MessageModel::insertErrorMessage(BufferInfo bufferInfo, const QString &errorString) {
+ int idx = messageCount();
+ beginInsertRows(QModelIndex(), idx, idx);
+ Message msg(bufferInfo, Message::Error, errorString);
+ if(!messagesIsEmpty())
+ msg.setMsgId(messageItemAt(idx-1)->msgId());
+ else
+ msg.setMsgId(0);
+ insertMessage__(idx, msg);
+ endInsertRows();
+}
+
void MessageModel::requestBacklog(BufferId bufferId) {
if(_messagesWaiting.contains(bufferId))
return;
// ========================================
// MessageModelItem
// ========================================
-MessageModelItem::MessageModelItem(const Message &msg)
- : _msg(msg)
-{
- if(!_msg.sender().contains('!'))
- _msg.setFlags(_msg.flags() |= Message::ServerMsg);
-}
-
QVariant MessageModelItem::data(int column, int role) const {
if(column < MessageModel::TimestampColumn || column > MessageModel::ContentsColumn)
return QVariant();