X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcorebuffersyncer.cpp;h=b055e727547b20de9ee4f0dfdba58a9a2c74449f;hp=f218508f2d20799af916a58c1dcc4e50f072b9d9;hb=526eccc444029c5a0d80694487c3aec6707cbeda;hpb=3c2914faeb01f3bc32e29f40179ae88040fbcf59 diff --git a/src/core/corebuffersyncer.cpp b/src/core/corebuffersyncer.cpp index f218508f..b055e727 100644 --- a/src/core/corebuffersyncer.cpp +++ b/src/core/corebuffersyncer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -25,9 +25,15 @@ #include "corenetwork.h" #include "ircchannel.h" +class PurgeEvent : public QEvent { +public: + PurgeEvent() : QEvent(QEvent::User) {} +}; + CoreBufferSyncer::CoreBufferSyncer(CoreSession *parent) - : BufferSyncer(parent), - _coreSession(parent) + : BufferSyncer(Core::bufferLastSeenMsgIds(parent->user()), parent), + _coreSession(parent), + _purgeBuffers(false) { } @@ -94,7 +100,6 @@ void CoreBufferSyncer::renameBuffer(BufferId bufferId, QString newName) { void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId bufferId2) { BufferInfo bufferInfo1 = Core::getBufferInfo(_coreSession->user(), bufferId1); BufferInfo bufferInfo2 = Core::getBufferInfo(_coreSession->user(), bufferId2); - qDebug() << Q_FUNC_INFO << bufferInfo1 << bufferInfo2; if(!bufferInfo1.isValid() || !bufferInfo2.isValid()) { qWarning() << "CoreBufferSyncer::mergeBufferPermanently(): invalid BufferIds:" << bufferId1 << bufferId2 << "for User:" << _coreSession->user(); return; @@ -106,7 +111,38 @@ void CoreBufferSyncer::mergeBuffersPermanently(BufferId bufferId1, BufferId buff } if(Core::mergeBuffersPermanently(_coreSession->user(), bufferId1, bufferId2)) { - qDebug () << "HUUUUP"; 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); + } + } +}