warnings--
[quassel.git] / src / core / corebuffersyncer.cpp
index d7a6ebc..55c28b2 100644 (file)
@@ -30,8 +30,9 @@ public:
   PurgeEvent() : QEvent(QEvent::User) {}
 };
 
+INIT_SYNCABLE_OBJECT(CoreBufferSyncer)
 CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent)
-  : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), parent),
+  : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), Core::bufferMarkerLineMsgIds(parent->user()), parent),
     _coreSession(parent),
     _purgeBuffers(false)
 {
@@ -39,18 +40,31 @@ CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent)
 
 void CoreBufferSyncer::requestSetLastSeenMsg(BufferId buffer, const MsgId &msgId) {
   if(setLastSeenMsg(buffer, msgId))
-    dirtyBuffers << buffer;
+    dirtyLastSeenBuffers << buffer;
+}
+
+void CoreBufferSyncer::requestSetMarkerLine(BufferId buffer, const MsgId &msgId) {
+  if(setMarkerLine(buffer, msgId))
+    dirtyMarkerLineBuffers << buffer;
 }
 
 void CoreBufferSyncer::storeDirtyIds() {
   UserId userId = _coreSession->user();
   MsgId msgId;
-  foreach(BufferId bufferId, dirtyBuffers) {
+  foreach(BufferId bufferId, dirtyLastSeenBuffers) {
     msgId = lastSeenMsg(bufferId);
     if(msgId.isValid())
       Core::setBufferLastSeenMsg(userId, bufferId, msgId);
   }
-  dirtyBuffers.clear();
+
+  foreach(BufferId bufferId, dirtyMarkerLineBuffers) {
+    msgId = markerLine(bufferId);
+    if(msgId.isValid())
+      Core::setBufferMarkerLineMsg(userId, bufferId, msgId);
+  }
+
+  dirtyLastSeenBuffers.clear();
+  dirtyMarkerLineBuffers.clear();
 }
 
 void CoreBufferSyncer::removeBuffer(BufferId bufferId) {
@@ -139,10 +153,10 @@ void CoreBufferSyncer::purgeBufferIds() {
     actualBuffers << bufferInfo.bufferId();
   }
 
-  QList<BufferId> storedIds = bufferIds();
+  QSet<BufferId> storedIds = lastSeenBufferIds().toSet() + markerLineBufferIds().toSet();
   foreach(BufferId bufferId, storedIds) {
     if(!actualBuffers.contains(bufferId)) {
-      removeBuffer(bufferId);
+      BufferSyncer::removeBuffer(bufferId);
     }
   }
 }