Quassl shows now activity from the backlog aswell.
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 4 Feb 2008 15:18:49 +0000 (15:18 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 4 Feb 2008 15:18:49 +0000 (15:18 +0000)
The first time you start a client on a new mashine will result in a
pretty colorfull buffer overview. this is because the visited state is
stored locally per client.

src/client/buffermodel.cpp
src/client/client.cpp
src/client/clientsettings.cpp
src/client/clientsettings.h
src/client/networkmodel.cpp
src/client/networkmodel.h
version.inc

index 2fc222e..0b87f81 100644 (file)
@@ -73,5 +73,7 @@ QModelIndex BufferModel::currentIndex() {
 
 void BufferModel::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
   Q_UNUSED(current);
 
 void BufferModel::currentChanged(const QModelIndex &current, 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);
 }
   setData(previous, qVariantFromValue((int)BufferItem::NoActivity), NetworkModel::BufferActivityRole);
 }
index 9e22ce0..804f827 100644 (file)
@@ -405,7 +405,7 @@ void Client::recvBacklogData(BufferInfo id, QVariantList msgs, bool /*done*/) {
   foreach(QVariant v, msgs) {
     Message msg = v.value<Message>();
     b->prependMsg(msg);
   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();
     if(!layoutQueue.contains(b)) layoutQueue.append(b);
   }
   if(layoutQueue.count() && !layoutTimer->isActive()) layoutTimer->start();
index 87ad816..2bf6412 100644 (file)
 #include <QStringList>
 
 ClientSettings::ClientSettings(QString g) : Settings(g, Global::clientApplicationName) {
 #include <QStringList>
 
 ClientSettings::ClientSettings(QString g) : Settings(g, Global::clientApplicationName) {
-
-
 }
 
 ClientSettings::~ClientSettings() {
 }
 
 ClientSettings::~ClientSettings() {
-
-
 }
 
 /***********************************************************************************************/
 
 CoreAccountSettings::CoreAccountSettings(const QString &subgroup) : ClientSettings("CoreAccounts") {
   _subgroup = subgroup;
 }
 
 /***********************************************************************************************/
 
 CoreAccountSettings::CoreAccountSettings(const QString &subgroup) : ClientSettings("CoreAccounts") {
   _subgroup = subgroup;
-
 }
 
 QList<AccountId> CoreAccountSettings::knownAccounts() {
 }
 
 QList<AccountId> CoreAccountSettings::knownAccounts() {
@@ -87,4 +82,17 @@ void CoreAccountSettings::removeAccount(AccountId id) {
   removeLocalKey(QString("%1").arg(id.toInt()));
 }
 
   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>();
+}
index 9a93597..7962423 100644 (file)
@@ -65,4 +65,12 @@ class CoreAccountSettings : public ClientSettings {
     QString _subgroup;
 };
 
     QString _subgroup;
 };
 
+class BufferSettings : public CoreAccountSettings {
+public:
+  BufferSettings(BufferId bufferId);
+
+  void setLastSeen(QDateTime);
+  QDateTime lastSeen();
+};
+
 #endif
 #endif
index 0401dca..61b269f 100644 (file)
@@ -51,8 +51,9 @@ BufferItem::BufferItem(BufferInfo bufferInfo, AbstractTreeItem *parent)
   if(bufferType() == QueryType)
     flags |= Qt::ItemIsDropEnabled;
   setFlags(flags);
   if(bufferType() == QueryType)
     flags |= Qt::ItemIsDropEnabled;
   setFlags(flags);
-}
 
 
+  _lastSeen = BufferSettings(bufferInfo.bufferId()).lastSeen();
+}
 
 const BufferInfo &BufferItem::bufferInfo() const {
   return _bufferInfo;
 
 const BufferInfo &BufferItem::bufferInfo() const {
   return _bufferInfo;
@@ -81,14 +82,17 @@ BufferItem::ActivityLevel BufferItem::activity() const {
   return _activity;
 }
 
   return _activity;
 }
 
-void BufferItem::setActivity(const ActivityLevel &level) {
+bool BufferItem::setActivity(const ActivityLevel &level) {
   _activity = level;
   emit dataChanged();
   _activity = level;
   emit dataChanged();
+  return true;
 }
 
 void BufferItem::updateActivity(const ActivityLevel &level) {
 }
 
 void BufferItem::updateActivity(const ActivityLevel &level) {
+  ActivityLevel oldActivity = _activity;
   _activity |= level;
   _activity |= level;
-  emit dataChanged();
+  if(oldActivity != _activity)
+    emit dataChanged();
 }
 
 QVariant BufferItem::data(int column, int role) const {
 }
 
 QVariant BufferItem::data(int column, int role) const {
@@ -115,7 +119,9 @@ QVariant BufferItem::data(int column, int role) const {
 bool BufferItem::setData(int column, const QVariant &value, int role) {
   switch(role) {
   case NetworkModel::BufferActivityRole:
 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);
   }
   default:
     return PropertyMapItem::setData(column, value, role);
   }
@@ -263,6 +269,21 @@ void BufferItem::userModeChanged(IrcUser *ircUser) {
   addUserToCategory(ircUser);
 }
 
   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
 *****************************************/
 /*****************************************
 *  Network Items
 *****************************************/
@@ -701,6 +722,14 @@ void NetworkModel::bufferUpdated(BufferInfo bufferInfo) {
 }
 
 void NetworkModel::updateBufferActivity(const Message &msg) {
 }
 
 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;
   BufferItem::ActivityLevel level = BufferItem::OtherActivity;
   if(msg.type() == Message::Plain || msg.type() == Message::Notice)
     level |= BufferItem::NewMessage;
@@ -708,7 +737,7 @@ void NetworkModel::updateBufferActivity(const Message &msg) {
   const Network *net = Client::network(msg.bufferInfo().networkId());
   if(net && msg.text().contains(net->myNick()))
     level |= BufferItem::Highlight;
   const Network *net = Client::network(msg.bufferInfo().networkId());
   if(net && msg.text().contains(net->myNick()))
     level |= BufferItem::Highlight;
-  
+
   bufferItem(msg.bufferInfo())->updateActivity(level);
 }
 
   bufferItem(msg.bufferInfo())->updateActivity(level);
 }
 
index b038f9d..959d89a 100644 (file)
@@ -32,6 +32,8 @@ class BufferInfo;
 
 #include "selectionmodelsynchronizer.h"
 #include "modelpropertymapper.h"
 
 #include "selectionmodelsynchronizer.h"
 #include "modelpropertymapper.h"
+#include "clientsettings.h"
+
 class MappedSelectionModel;
 class QAbstractItemView;
 class Network;
 class MappedSelectionModel;
 class QAbstractItemView;
 class Network;
@@ -81,9 +83,13 @@ public:
   Q_DECLARE_FLAGS(ActivityLevel, Activity)
 
   ActivityLevel activity() const;
   Q_DECLARE_FLAGS(ActivityLevel, Activity)
 
   ActivityLevel activity() const;
-  void setActivity(const ActivityLevel &level);
+  bool setActivity(const ActivityLevel &level);
   void updateActivity(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);
 public slots:
   void setTopic(const QString &topic);
   void join(IrcUser *ircUser);
@@ -100,6 +106,8 @@ private:
   BufferInfo _bufferInfo;
   ActivityLevel _activity;
   Type _type;
   BufferInfo _bufferInfo;
   ActivityLevel _activity;
   Type _type;
+  QDateTime _lastMsgInsert;
+  QDateTime _lastSeen;
 
   QPointer<IrcChannel> _ircChannel;
 };
 
   QPointer<IrcChannel> _ircChannel;
 };
@@ -210,7 +218,8 @@ public:
     BufferIdRole,
     NetworkIdRole,
     BufferInfoRole,
     BufferIdRole,
     NetworkIdRole,
     BufferInfoRole,
-    ItemTypeRole
+    ItemTypeRole,
+    LastSeenRole
   };
 
   enum itemTypes {
   };
 
   enum itemTypes {
index ead22e7..d6629d4 100644 (file)
@@ -4,8 +4,8 @@
 { using namespace Global;
 
   quasselVersion = "0.2.0-pre";
 { 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;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 437;