From: Manuel Nickschas Date: Wed, 6 Aug 2008 22:37:32 +0000 (+0200) Subject: Reset the MessageProcessor on disconnect X-Git-Tag: 0.3.0~89 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=019a59ffca44ddc32fc6b16fd6cdcc8f3e1c93c6;ds=sidebyside Reset the MessageProcessor on disconnect --- diff --git a/src/client/abstractmessageprocessor.h b/src/client/abstractmessageprocessor.h index f02728cb..b6bc4492 100644 --- a/src/client/abstractmessageprocessor.h +++ b/src/client/abstractmessageprocessor.h @@ -28,6 +28,7 @@ class AbstractMessageProcessor : public QObject { public: AbstractMessageProcessor(QObject *parent); + virtual void reset() = 0; public slots: virtual void process(Message &msg) = 0; diff --git a/src/client/client.cpp b/src/client/client.cpp index d2972634..b0bd4df3 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -342,6 +342,8 @@ void Client::disconnectFromCore() { emit disconnected(); emit coreConnectionStateChanged(false); + messageProcessor()->reset(); + // Clear internal data. Hopefully nothing relies on it at this point. setCurrentCoreAccount(0); diff --git a/src/qtui/qtuimessageprocessor.cpp b/src/qtui/qtuimessageprocessor.cpp index 203397de..f06030d3 100644 --- a/src/qtui/qtuimessageprocessor.cpp +++ b/src/qtui/qtuimessageprocessor.cpp @@ -33,6 +33,15 @@ QtUiMessageProcessor::QtUiMessageProcessor(QObject *parent) : AbstractMessagePro connect(&_processTimer, SIGNAL(timeout()), this, SLOT(processNextMessage())); } +void QtUiMessageProcessor::reset() { + if(processMode() == TimerBased) { + if(_processTimer.isActive()) _processTimer.stop(); + _processing = false; + _currentBatch.clear(); + _processQueue.clear(); + } +} + void QtUiMessageProcessor::process(Message &msg) { checkForHighlight(msg); Client::messageModel()->insertMessage(msg); diff --git a/src/qtui/qtuimessageprocessor.h b/src/qtui/qtuimessageprocessor.h index cfbc1394..53d4f021 100644 --- a/src/qtui/qtuimessageprocessor.h +++ b/src/qtui/qtuimessageprocessor.h @@ -35,9 +35,12 @@ class QtUiMessageProcessor : public AbstractMessageProcessor { }; QtUiMessageProcessor(QObject *parent); + inline bool isProcessing() const { return _processing; } inline Mode processMode() const { return _processMode; } + void reset(); + public slots: void process(Message &msg); void process(QList &msgs);