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