From: Marcus Eggenberger Date: Mon, 6 Oct 2008 12:20:35 +0000 (+0200) Subject: use cluebat with day change message X-Git-Tag: 0.3.1~197 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=0a3fcc38ea09618d41280e2fcb20e73fb10b8ceb use cluebat with day change message --- diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index 183274e3..edc11179 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -76,10 +76,7 @@ bool MessageModel::insertMessage(const Message &msg, bool fakeMsg) { return false; } - MessageModelItem *item = createMessageModelItem(msg); - beginInsertRows(QModelIndex(), idx, idx); - _messageList.insert(idx, item); - endInsertRows(); + insertMessageGroup(QList() << msg); return true; } @@ -102,24 +99,28 @@ void MessageModel::insertMessages(const QList &msglist) { } void MessageModel::insertMessageGroup(const QList &msglist) { + // the msglist can be assumed to be non empty int idx = indexForId(msglist.first().msgId()); + int start = idx; + int end = idx + msglist.count() - 1; + MessageModelItem *dayChangeItem = 0; + if(idx > 0) { int prevIdx = idx - 1; if(_messageList[prevIdx]->msgType() == Message::DayChange && _messageList[prevIdx]->timeStamp() > msglist.value(0).timestamp()) { beginRemoveRows(QModelIndex(), prevIdx, prevIdx); MessageModelItem *oldItem = _messageList.takeAt(prevIdx); - delete oldItem; + if(msglist.last().timestamp() < oldItem->timeStamp()) + dayChangeItem = oldItem; + else + delete oldItem; endRemoveRows(); idx--; } } - int start = idx; - int end = idx + msglist.count() - 1; - Message dayChangeMsg; - bool needsDayChangeMsg = false; - if(idx < _messageList.count() && _messageList[idx]->msgType() != Message::DayChange) { + if(!dayChangeItem && idx < _messageList.count() && _messageList[idx]->msgType() != Message::DayChange) { QDateTime nextTs = _messageList[idx]->timeStamp(); QDateTime prevTs = msglist.last().timestamp(); nextTs.setTimeSpec(Qt::UTC); @@ -129,19 +130,22 @@ void MessageModel::insertMessageGroup(const QList &msglist) { if(nextDay != prevDay) { nextTs.setTime_t(nextDay * 86400); nextTs.setTimeSpec(Qt::LocalTime); - dayChangeMsg = Message::ChangeOfDay(nextTs); + Message dayChangeMsg = Message::ChangeOfDay(nextTs); dayChangeMsg.setMsgId(msglist.last().msgId()); - needsDayChangeMsg = true; - end++; + dayChangeItem = createMessageModelItem(dayChangeMsg); } } + + if(dayChangeItem) + end++; + beginInsertRows(QModelIndex(), start, end); foreach(Message msg, msglist) { _messageList.insert(idx, createMessageModelItem(msg)); idx++; } - if(needsDayChangeMsg) { - _messageList.insert(idx, createMessageModelItem(dayChangeMsg)); + if(dayChangeItem) { + _messageList.insert(idx, dayChangeItem); } endInsertRows(); } diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index 7db1f170..f68a81e2 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -573,6 +573,8 @@ void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const Q Q_UNUSED(url) Q_UNUSED(urlRect) #else + qDebug() << "load call" << this << webPreview.previewItem; + if(webPreview.parentItem != parentItem) webPreview.parentItem = parentItem; @@ -605,6 +607,7 @@ void ChatScene::clearWebPreview(ChatItem *parentItem) { #ifndef HAVE_WEBKIT Q_UNUSED(parentItem) #else + qDebug() << "clear call" << this << webPreview.previewItem; if(parentItem == 0 || webPreview.parentItem == parentItem) { // posting an event ensures that the item will not be removed as // the result of another event. this could result in bad segfaults @@ -615,6 +618,7 @@ void ChatScene::clearWebPreview(ChatItem *parentItem) { void ChatScene::showWebPreview() { #ifdef HAVE_WEBKIT + qDebug() << "show event" << this << webPreview.previewItem; if(webPreview.previewItem) addItem(webPreview.previewItem); #endif @@ -622,10 +626,14 @@ void ChatScene::showWebPreview() { void ChatScene::clearWebPreviewEvent() { #ifdef HAVE_WEBKIT + qDebug() << "clear event" << this << webPreview.previewItem; if(webPreview.previewItem) { - if(webPreview.previewItem->scene()) - removeItem(webPreview.previewItem); +// if(webPreview.previewItem->scene()) { +// removeItem(webPreview.previewItem); +// items(); +// } delete webPreview.previewItem; + items(); webPreview.previewItem = 0; } webPreview.parentItem = 0;