X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=55c28b266a42125dac766fc5b50686eda710faca;hp=b055e727547b20de9ee4f0dfdba58a9a2c74449f;hb=46984aca05b2d5f8dddd0c8739e60a1753078123;hpb=f998a95ef357691a8b4cb229602528edd39503bb diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index b055e727..55c28b26 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -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,7 +153,7 @@ void CoreBufferSyncer::purgeBufferIds() { actualBuffers << bufferInfo.bufferId(); } - QList storedIds = bufferIds(); + QSet storedIds = lastSeenBufferIds().toSet() + markerLineBufferIds().toSet(); foreach(BufferId bufferId, storedIds) { if(!actualBuffers.contains(bufferId)) { BufferSyncer::removeBuffer(bufferId);