X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=37ff255f9b95f80c80e1f5705897a96fa8d25962;hb=f6b9eeda207d42c99fc3e9085631722cf2ec83dc;hp=9549df7a0df47a60bc575a990ebd70f29645d2f1;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c;p=quassel.git diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index 9549df7a..37ff255f 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -25,9 +25,16 @@ #include "corenetwork.h" #include "ircchannel.h" +class PurgeEvent : public QEvent { +public: + PurgeEvent() : QEvent(QEvent::User) {} +}; + +INIT_SYNCABLE_OBJECT(CoreBufferSyncer) CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent) : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), parent), - _coreSession(parent) + _coreSession(parent), + _purgeBuffers(false) { } @@ -108,3 +115,35 @@ void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId buff BufferSyncer::mergeBuffersPermanently(bufferId1, bufferId2); } } + +void CoreBufferSyncer::customEvent(QEvent *event) { + if(event->type() != QEvent::User) + return; + + purgeBufferIds(); + event->accept(); +} + +void CoreBufferSyncer::requestPurgeBufferIds() { + if(_purgeBuffers) + return; + + _purgeBuffers = true; + QCoreApplication::postEvent(this, new PurgeEvent()); +} + +void CoreBufferSyncer::purgeBufferIds() { + _purgeBuffers = false; + QList bufferInfos = Core::requestBuffers(_coreSession->user()); + QSet actualBuffers; + foreach(BufferInfo bufferInfo, bufferInfos) { + actualBuffers << bufferInfo.bufferId(); + } + + QList storedIds = bufferIds(); + foreach(BufferId bufferId, storedIds) { + if(!actualBuffers.contains(bufferId)) { + BufferSyncer::removeBuffer(bufferId); + } + } +}