X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fmessagemodel.cpp;h=fd59ddb27460b253d246e08c9facc0e3fcc4c6a5;hp=a4b050d24b3cafc30dfa2c069284a281153772f8;hb=c1cf157116de7fc3da96203aa6f03c38c7ebb650;hpb=30b159cb876a9495de42e9a3e70ca050516f0805 diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index a4b050d2..fd59ddb2 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -23,36 +23,36 @@ #include #include "backlogsettings.h" -#include "clientbacklogmanager.h" #include "client.h" +#include "clientbacklogmanager.h" #include "message.h" #include "networkmodel.h" class ProcessBufferEvent : public QEvent { public: - inline ProcessBufferEvent() : QEvent(QEvent::User) {} + inline ProcessBufferEvent() + : QEvent(QEvent::User) + {} }; - -MessageModel::MessageModel(QObject *parent) +MessageModel::MessageModel(QObject* parent) : QAbstractItemModel(parent) { QDateTime now = QDateTime::currentDateTime(); now.setTimeSpec(Qt::UTC); _nextDayChange.setTimeSpec(Qt::UTC); - _nextDayChange.setMSecsSinceEpoch( - ((now.toMSecsSinceEpoch() / DAY_IN_MSECS) + 1) * DAY_IN_MSECS); + _nextDayChange.setMSecsSinceEpoch(((now.toMSecsSinceEpoch() / DAY_IN_MSECS) + 1) * DAY_IN_MSECS); _nextDayChange.setTimeSpec(Qt::LocalTime); _dayChangeTimer.setInterval(QDateTime::currentDateTime().secsTo(_nextDayChange) * 1000); _dayChangeTimer.start(); connect(&_dayChangeTimer, &QTimer::timeout, this, &MessageModel::changeOfDay); } - -QVariant MessageModel::data(const QModelIndex &index, int role) const +QVariant MessageModel::data(const QModelIndex& index, int role) const { - int row = index.row(); int column = index.column(); + int row = index.row(); + int column = index.column(); if (row < 0 || row >= messageCount() || column < 0) return QVariant(); @@ -63,8 +63,7 @@ QVariant MessageModel::data(const QModelIndex &index, int role) const // return _messageList[row]->data(index.column(), role); } - -bool MessageModel::setData(const QModelIndex &index, const QVariant &value, int role) +bool MessageModel::setData(const QModelIndex& index, const QVariant& value, int role) { int row = index.row(); if (row < 0 || row >= messageCount()) @@ -77,12 +76,11 @@ bool MessageModel::setData(const QModelIndex &index, const QVariant &value, int return false; } - -bool MessageModel::insertMessage(const Message &msg, bool fakeMsg) +bool MessageModel::insertMessage(const Message& msg, bool fakeMsg) { MsgId id = msg.msgId(); int idx = indexForId(id); - if (!fakeMsg && idx < messageCount()) { // check for duplicate + if (!fakeMsg && idx < messageCount()) { // check for duplicate if (messageItemAt(idx)->msgId() == id) return false; } @@ -91,8 +89,7 @@ bool MessageModel::insertMessage(const Message &msg, bool fakeMsg) return true; } - -void MessageModel::insertMessages(const QList &msglist) +void MessageModel::insertMessages(const QList& msglist) { if (msglist.isEmpty()) return; @@ -118,12 +115,11 @@ void MessageModel::insertMessages(const QList &msglist) } } - -void MessageModel::insertMessageGroup(const QList &msglist) +void MessageModel::insertMessageGroup(const QList& msglist) { - Q_ASSERT(!msglist.isEmpty()); // the msglist can be assumed to be non empty -// int last = msglist.count() - 1; -// Q_ASSERT(0 == last || msglist.at(0).msgId() != msglist.at(last).msgId() || msglist.at(last).type() == Message::DayChange); + Q_ASSERT(!msglist.isEmpty()); // the msglist can be assumed to be non empty + // int last = msglist.count() - 1; + // Q_ASSERT(0 == last || msglist.at(0).msgId() != msglist.at(last).msgId() || msglist.at(last).type() == Message::DayChange); int start = indexForId(msglist.first().msgId()); int end = start + msglist.count() - 1; Message dayChangeMsg; @@ -132,8 +128,7 @@ void MessageModel::insertMessageGroup(const QList &msglist) // 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()) { + if (messageItemAt(prevIdx)->msgType() == Message::DayChange && messageItemAt(prevIdx)->timestamp() > msglist.at(0).timestamp()) { beginRemoveRows(QModelIndex(), prevIdx, prevIdx); Message oldDayChangeMsg = takeMessageAt(prevIdx); if (msglist.last().timestamp() < oldDayChangeMsg.timestamp()) { @@ -180,13 +175,13 @@ void MessageModel::insertMessageGroup(const QList &msglist) insertMessage__(start + msglist.count(), dayChangeMsg); endInsertRows(); - Q_ASSERT(start == end || messageItemAt(start)->msgId() != messageItemAt(end)->msgId() || messageItemAt(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()); } - -int MessageModel::insertMessagesGracefully(const QList &msglist) +int MessageModel::insertMessagesGracefully(const QList& msglist) { /* short description: * 1) first we check where the message with the highest msgId from msglist would be inserted @@ -201,13 +196,13 @@ int MessageModel::insertMessagesGracefully(const QList &msglist) QList grouplist; MsgId minId; MsgId dupeId; - int processedMsgs = 1; // we know the list isn't empty, so we at least process one message + int processedMsgs = 1; // we know the list isn't empty, so we at least process one message int idx; bool fastForward = false; QList::const_iterator iter; if (inOrder) { iter = msglist.constEnd(); - --iter; // this op is safe as we've allready passed an empty check + --iter; // this op is safe as we've allready passed an empty check } else { iter = msglist.constBegin(); @@ -240,7 +235,7 @@ int MessageModel::insertMessagesGracefully(const QList &msglist) break; processedMsgs++; - if (grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId + if (grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId idx = indexForId((*iter).msgId()); if (idx >= 0 && !messagesIsEmpty()) dupeId = messageItemAt(idx)->msgId(); @@ -272,7 +267,7 @@ int MessageModel::insertMessagesGracefully(const QList &msglist) break; processedMsgs++; - if (grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId + if (grouplist.isEmpty()) { // as long as we don't have a starting point, we have to update the dupeId idx = indexForId((*iter).msgId()); if (idx >= 0 && !messagesIsEmpty()) dupeId = messageItemAt(idx)->msgId(); @@ -305,8 +300,7 @@ int MessageModel::insertMessagesGracefully(const QList &msglist) return processedMsgs; } - -void MessageModel::customEvent(QEvent *event) +void MessageModel::customEvent(QEvent* event) { if (event->type() != QEvent::User) return; @@ -326,7 +320,6 @@ void MessageModel::customEvent(QEvent *event) QCoreApplication::postEvent(this, new ProcessBufferEvent()); } - void MessageModel::clear() { _messagesWaiting.clear(); @@ -337,7 +330,6 @@ void MessageModel::clear() } } - // returns index of msg with given Id or of the next message after that (i.e., the index where we'd insert this msg) int MessageModel::indexForId(MsgId id) { @@ -348,17 +340,19 @@ int MessageModel::indexForId(MsgId id) return messageCount(); // binary search - int start = 0; int end = messageCount() - 1; + int start = 0; + int end = messageCount() - 1; while (true) { if (end - start == 1) return end; int pivot = (end + start) / 2; - if (id <= messageItemAt(pivot)->msgId()) end = pivot; - else start = pivot; + if (id <= messageItemAt(pivot)->msgId()) + end = pivot; + else + start = pivot; } } - void MessageModel::changeOfDay() { _dayChangeTimer.setInterval(DAY_IN_MSECS); @@ -376,21 +370,19 @@ void MessageModel::changeOfDay() _nextDayChange = _nextDayChange.addMSecs(DAY_IN_MSECS); } - -void MessageModel::insertErrorMessage(BufferInfo bufferInfo, const QString &errorString) +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()); + msg.setMsgId(messageItemAt(idx - 1)->msgId()); else msg.setMsgId(0); insertMessage__(idx, msg); endInsertRows(); } - void MessageModel::requestBacklog(BufferId bufferId) { if (_messagesWaiting.contains(bufferId)) @@ -403,16 +395,15 @@ void MessageModel::requestBacklog(BufferId bufferId) if (messageItemAt(i)->bufferId() == bufferId) { _messagesWaiting[bufferId] = requestCount; Client::backlogManager()->emitMessagesRequested(tr("Requesting %1 messages from backlog for buffer %2:%3") - .arg(requestCount) - .arg(Client::networkModel()->networkName(bufferId)) - .arg(Client::networkModel()->bufferName(bufferId))); + .arg(requestCount) + .arg(Client::networkModel()->networkName(bufferId)) + .arg(Client::networkModel()->bufferName(bufferId))); Client::backlogManager()->requestBacklog(bufferId, -1, messageItemAt(i)->msgId(), requestCount); return; } } } - void MessageModel::messagesReceived(BufferId bufferId, int count) { if (!_messagesWaiting.contains(bufferId)) @@ -425,7 +416,6 @@ void MessageModel::messagesReceived(BufferId bufferId, int count) } } - void MessageModel::buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferId2) { for (int i = 0; i < messageCount(); i++) { @@ -437,7 +427,6 @@ void MessageModel::buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferI } } - // ======================================== // MessageModelItem // ======================================== @@ -466,8 +455,7 @@ QVariant MessageModelItem::data(int column, int role) const } } - -bool MessageModelItem::setData(int column, const QVariant &value, int role) +bool MessageModelItem::setData(int column, const QVariant& value, int role) { Q_UNUSED(column); @@ -480,38 +468,32 @@ bool MessageModelItem::setData(int column, const QVariant &value, int role) } } - // Stuff for later -bool MessageModelItem::lessThan(const MessageModelItem *m1, const MessageModelItem *m2) +bool MessageModelItem::lessThan(const MessageModelItem* m1, const MessageModelItem* m2) { return (*m1) < (*m2); } - -bool MessageModelItem::operator<(const MessageModelItem &other) const +bool MessageModelItem::operator<(const MessageModelItem& other) const { return msgId() < other.msgId(); } - -bool MessageModelItem::operator==(const MessageModelItem &other) const +bool MessageModelItem::operator==(const MessageModelItem& other) const { return msgId() == other.msgId(); } - -bool MessageModelItem::operator>(const MessageModelItem &other) const +bool MessageModelItem::operator>(const MessageModelItem& other) const { return msgId() > other.msgId(); } - -QDebug operator<<(QDebug dbg, const MessageModelItem &msgItem) +QDebug operator<<(QDebug dbg, const MessageModelItem& msgItem) { - dbg.nospace() << qPrintable(QString("MessageModelItem(MsgId:")) << msgItem.msgId() - << qPrintable(QString(",")) << msgItem.timestamp() - << qPrintable(QString(", Type:")) << msgItem.msgType() - << qPrintable(QString(", Flags:")) << msgItem.msgFlags() << qPrintable(QString(")")) - << msgItem.data(1, Qt::DisplayRole).toString() << ":" << msgItem.data(2, Qt::DisplayRole).toString(); + dbg.nospace() << qPrintable(QString("MessageModelItem(MsgId:")) << msgItem.msgId() << qPrintable(QString(",")) << msgItem.timestamp() + << qPrintable(QString(", Type:")) << msgItem.msgType() << qPrintable(QString(", Flags:")) << msgItem.msgFlags() + << qPrintable(QString(")")) << msgItem.data(1, Qt::DisplayRole).toString() << ":" + << msgItem.data(2, Qt::DisplayRole).toString(); return dbg; }