void BufferModel::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) {
Q_UNUSED(current);
+ setData(current, QDateTime::currentDateTime(), NetworkModel::LastSeenRole);
+ setData(previous, QDateTime::currentDateTime(), NetworkModel::LastSeenRole);
setData(previous, qVariantFromValue((int)BufferItem::NoActivity), NetworkModel::BufferActivityRole);
}
foreach(QVariant v, msgs) {
Message msg = v.value<Message>();
b->prependMsg(msg);
- // networkModel()->updateBufferActivity(msg);
+ networkModel()->updateBufferActivity(msg);
if(!layoutQueue.contains(b)) layoutQueue.append(b);
}
if(layoutQueue.count() && !layoutTimer->isActive()) layoutTimer->start();
#include <QStringList>
ClientSettings::ClientSettings(QString g) : Settings(g, Global::clientApplicationName) {
-
-
}
ClientSettings::~ClientSettings() {
-
-
}
/***********************************************************************************************/
CoreAccountSettings::CoreAccountSettings(const QString &subgroup) : ClientSettings("CoreAccounts") {
_subgroup = subgroup;
-
}
QList<AccountId> CoreAccountSettings::knownAccounts() {
removeLocalKey(QString("%1").arg(id.toInt()));
}
+/***********************************************************************************************/
+BufferSettings::BufferSettings(BufferId bufferId)
+ : CoreAccountSettings(QString("Buffers/%1").arg(bufferId.toInt()))
+{
+}
+
+void BufferSettings::setLastSeen(QDateTime seenDate) {
+ setAccountValue("LastSeen", seenDate);
+}
+
+QDateTime BufferSettings::lastSeen() {
+ return accountValue("LastSeen", QDateTime()).value<QDateTime>();
+}
QString _subgroup;
};
+class BufferSettings : public CoreAccountSettings {
+public:
+ BufferSettings(BufferId bufferId);
+
+ void setLastSeen(QDateTime);
+ QDateTime lastSeen();
+};
+
#endif
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);
}
#include "selectionmodelsynchronizer.h"
#include "modelpropertymapper.h"
+#include "clientsettings.h"
+
class MappedSelectionModel;
class QAbstractItemView;
class Network;
Q_DECLARE_FLAGS(ActivityLevel, Activity)
ActivityLevel activity() const;
- void setActivity(const ActivityLevel &level);
+ bool setActivity(const ActivityLevel &level);
void updateActivity(const ActivityLevel &level);
+ void setLastMsgInsert(QDateTime msgDate);
+ bool setLastSeen();
+ QDateTime lastSeen();
+
public slots:
void setTopic(const QString &topic);
void join(IrcUser *ircUser);
BufferInfo _bufferInfo;
ActivityLevel _activity;
Type _type;
+ QDateTime _lastMsgInsert;
+ QDateTime _lastSeen;
QPointer<IrcChannel> _ircChannel;
};
BufferIdRole,
NetworkIdRole,
BufferInfoRole,
- ItemTypeRole
+ ItemTypeRole,
+ LastSeenRole
};
enum itemTypes {
{ using namespace Global;
quasselVersion = "0.2.0-pre";
- quasselDate = "2008-02-03";
- quasselBuild = 454;
+ quasselDate = "2008-02-04";
+ quasselBuild = 455;
//! Minimum client build number the core needs
clientBuildNeeded = 437;