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) {
while(iter != msglist.constBegin()) {
iter--;
- if(!fastForward && (*iter).msgId() < minId)
+ if(!fastForward && (*iter).msgId() <= minId)
break;
processedMsgs++;
}
} else {
while(iter != msglist.constEnd()) {
- if(!fastForward && (*iter).msgId() < minId)
+ if(!fastForward && (*iter).msgId() <= minId)
break;
processedMsgs++;
}
void MessageModel::clear() {
- beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
- removeAllMessages();
- endRemoveRows();
_messagesWaiting.clear();
+ if (rowCount() > 0) {
+ beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
+ removeAllMessages();
+ endRemoveRows();
+ }
}
// returns index of msg with given Id or of the next message after that (i.e., the index where we'd insert this msg)
_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;
return QVariant();
switch(role) {
- case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(msgId());
- case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(bufferId());
- case MessageModel::TypeRole: return msgType();
- case MessageModel::FlagsRole: return (int)msgFlags();
- case MessageModel::TimestampRole: return timestamp();
- case MessageModel::RedirectedToRole: return qVariantFromValue<BufferId>(_redirectedTo);
- default: return QVariant();
+ case MessageModel::MessageRole: return QVariant::fromValue<Message>(message());
+ case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(msgId());
+ case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(bufferId());
+ case MessageModel::TypeRole: return msgType();
+ case MessageModel::FlagsRole: return (int)msgFlags();
+ case MessageModel::TimestampRole: return timestamp();
+ case MessageModel::RedirectedToRole: return qVariantFromValue<BufferId>(_redirectedTo);
+ default: return QVariant();
}
}