Implement buffer activity sync
[quassel.git] / src / core / corebuffersyncer.cpp
index 9845149..caed62e 100644 (file)
@@ -34,17 +34,20 @@ public:
 
 INIT_SYNCABLE_OBJECT(CoreBufferSyncer)
 CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent)
-    : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), parent),
+    : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), Core::bufferActivities(parent->user()), parent),
     _coreSession(parent),
     _purgeBuffers(false)
 {
+    connect(parent, SIGNAL(displayMsg(Message)), SLOT(addBufferActivity(Message)));
 }
 
 
 void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId)
 {
-    if (setLastSeenMsg(buffer, msgId))
+    if (setLastSeenMsg(buffer, msgId)) {
+        setBufferActivity(buffer, (int) Core::bufferActivity(buffer, msgId));
         dirtyLastSeenBuffers << buffer;
+    }
 }
 
 
@@ -71,8 +74,13 @@ void CoreBufferSyncer::storeDirtyIds()
             Core::setBufferMarkerLineMsg(userId, bufferId, msgId);
     }
 
+    foreach(BufferId bufferId, dirtyActivities) {
+        Core::setBufferActivity(userId, bufferId, activity(bufferId));
+    }
+
     dirtyLastSeenBuffers.clear();
     dirtyMarkerLineBuffers.clear();
+    dirtyActivities.clear();
 }
 
 
@@ -181,3 +189,8 @@ void CoreBufferSyncer::purgeBufferIds()
         }
     }
 }
+
+void CoreBufferSyncer::setBufferActivity(BufferId buffer, const int &activity) {
+    BufferSyncer::setBufferActivity(buffer, activity);
+    dirtyActivities << buffer;
+}