if(bufferType() == QueryType)
flags |= Qt::ItemIsDropEnabled;
setFlags(flags);
-}
+ _lastSeen = BufferSettings(bufferInfo.bufferId()).lastSeen();
+}
const BufferInfo &BufferItem::bufferInfo() const {
return _bufferInfo;
return _activity;
}
-void BufferItem::setActivity(const ActivityLevel &level) {
+bool BufferItem::setActivity(const ActivityLevel &level) {
_activity = level;
emit dataChanged();
+ return true;
}
void BufferItem::updateActivity(const ActivityLevel &level) {
+ ActivityLevel oldActivity = _activity;
_activity |= level;
- emit dataChanged();
+ if(oldActivity != _activity)
+ emit dataChanged();
}
QVariant BufferItem::data(int column, int role) const {
bool BufferItem::setData(int column, const QVariant &value, int role) {
switch(role) {
case NetworkModel::BufferActivityRole:
- setActivity((ActivityLevel)value.toInt());
+ return setActivity((ActivityLevel)value.toInt());
+ case NetworkModel::LastSeenRole:
+ return setLastSeen();
default:
return PropertyMapItem::setData(column, value, role);
}
addUserToCategory(ircUser);
}
+void BufferItem::setLastMsgInsert(QDateTime msgDate) {
+ if(msgDate.isValid() && msgDate > _lastMsgInsert)
+ _lastMsgInsert = msgDate;
+}
+
+bool BufferItem::setLastSeen() {
+ _lastSeen = _lastMsgInsert;
+ BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen);
+ return true;
+}
+
+QDateTime BufferItem::lastSeen() {
+ return _lastSeen;
+}
+
/*****************************************
* Network Items
*****************************************/
}
void NetworkModel::updateBufferActivity(const Message &msg) {
+ BufferItem *buff = bufferItem(msg.bufferInfo());
+ Q_ASSERT(buff);
+
+ buff->setLastMsgInsert(msg.timestamp());
+
+ if(buff->lastSeen() >= msg.timestamp())
+ return;
+
BufferItem::ActivityLevel level = BufferItem::OtherActivity;
if(msg.type() == Message::Plain || msg.type() == Message::Notice)
level |= BufferItem::NewMessage;
const Network *net = Client::network(msg.bufferInfo().networkId());
if(net && msg.text().contains(net->myNick()))
level |= BufferItem::Highlight;
-
+
bufferItem(msg.bufferInfo())->updateActivity(level);
}