/***************************************************************************
- * 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 *
#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)
{
}
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<BufferInfo> bufferInfos = Core::requestBuffers(_coreSession->user());
+ QSet<BufferId> actualBuffers;
+ foreach(BufferInfo bufferInfo, bufferInfos) {
+ actualBuffers << bufferInfo.bufferId();
+ }
+
+ QList<BufferId> storedIds = bufferIds();
+ foreach(BufferId bufferId, storedIds) {
+ if(!actualBuffers.contains(bufferId)) {
+ BufferSyncer::removeBuffer(bufferId);
+ }
+ }
+}