51 |
51 |
return false;
|
52 |
52 |
}
|
53 |
53 |
|
|
54 |
|
|
55 |
|
54 |
56 |
bool MessageModel::insertMessage(const Message &msg, bool fakeMsg) {
|
55 |
57 |
MsgId id = msg.msgId();
|
56 |
58 |
int idx = indexForId(id);
|
... | ... | |
66 |
68 |
return true;
|
67 |
69 |
}
|
68 |
70 |
|
|
71 |
|
|
72 |
void MessageModel::insertMessageGroup(const QList<Message> &msglist) {
|
|
73 |
if(msglist.isEmpty()) return;
|
|
74 |
|
|
75 |
int idx = indexForId(msglist.first().msgId());
|
|
76 |
beginInsertRows(QModelIndex(), idx, idx+msglist.count()-1);
|
|
77 |
|
|
78 |
foreach(Message msg, msglist) {
|
|
79 |
_messageList.insert(idx, createMessageModelItem(msg));
|
|
80 |
idx++;
|
|
81 |
}
|
|
82 |
|
|
83 |
endInsertRows();
|
|
84 |
}
|
|
85 |
|
|
86 |
|
69 |
87 |
void MessageModel::insertMessages(const QList<Message> &msglist) {
|
70 |
88 |
if(msglist.isEmpty()) return;
|
71 |
|
// FIXME make this more efficient by grouping msgs
|
72 |
|
foreach(Message msg, msglist)
|
73 |
|
insertMessage(msg);
|
|
89 |
|
|
90 |
//QTime start = QTime::currentTime();
|
|
91 |
|
|
92 |
int idx = indexForId(msglist.first().msgId());
|
|
93 |
QList<Message> grouplist;
|
|
94 |
|
|
95 |
MsgId id = idx < _messageList.count() ? _messageList.value(idx)->data(0, MsgIdRole).value<MsgId>() : NULL;
|
|
96 |
|
|
97 |
foreach(Message msg, msglist) {
|
|
98 |
if (id != NULL && msg.msgId() > id) {
|
|
99 |
insertMessageGroup(grouplist);
|
|
100 |
idx += indexForId(msg.msgId());
|
|
101 |
grouplist.clear();
|
|
102 |
id = idx < _messageList.count() ? _messageList.value(idx)->data(0, MsgIdRole).value<MsgId>() : NULL;
|
|
103 |
}
|
|
104 |
grouplist.append(msg);
|
|
105 |
}
|
|
106 |
|
|
107 |
if (!grouplist.isEmpty())
|
|
108 |
insertMessageGroup(grouplist);
|
|
109 |
|
|
110 |
//qDebug() << "Inserted Group: " << msglist.count() << " items in " << start.msecsTo(QTime::currentTime()) << " msec";
|
74 |
111 |
}
|
75 |
112 |
|
|
113 |
|
76 |
114 |
void MessageModel::clear() {
|
77 |
115 |
beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
|
78 |
116 |
qDeleteAll(_messageList);
|
... | ... | |
80 |
118 |
endRemoveRows();
|
81 |
119 |
}
|
82 |
120 |
|
|
121 |
|
83 |
122 |
// returns index of msg with given Id or of the next message after that (i.e., the index where we'd insert this msg)
|
84 |
123 |
int MessageModel::indexForId(MsgId id) {
|
85 |
124 |
if(_messageList.isEmpty() || id <= _messageList.value(0)->data(0, MsgIdRole).value<MsgId>()) return 0;
|
... | ... | |
119 |
158 |
}
|
120 |
159 |
}
|
121 |
160 |
|
|
161 |
|
|
162 |
// Stuff for later
|
|
163 |
bool MessageModelItem::lessThan(const MessageModelItem *m1, const MessageModelItem *m2){
|
|
164 |
return (*m1) < (*m2);
|
|
165 |
}
|
|
166 |
|
|
167 |
bool MessageModelItem::operator<(const MessageModelItem &other) const {
|
|
168 |
return _msgId < other._msgId;
|
|
169 |
}
|
|
170 |
|
|
171 |
bool MessageModelItem::operator==(const MessageModelItem &other) const {
|
|
172 |
return _msgId == other._msgId;
|
|
173 |
}
|
|
174 |
|
|
175 |
bool MessageModelItem::operator>(const MessageModelItem &other) const {
|
|
176 |
return _msgId > other._msgId;
|
|
177 |
}
|