#include "buffersettings.h"
#include "buffersyncer.h"
#include "bufferviewconfig.h"
+#include "clientaliasmanager.h"
#include "clientbacklogmanager.h"
#include "clientbufferviewmanager.h"
#include "clientirclisthelper.h"
/*** Initialization/destruction ***/
+bool Client::instanceExists()
+{
+ return instanceptr;
+}
+
Client *Client::instance() {
if(!instanceptr)
instanceptr = new Client();
_networkModel(0),
_bufferModel(0),
_bufferSyncer(0),
+ _aliasManager(0),
_backlogManager(new ClientBacklogManager(this)),
_bufferViewManager(0),
_ircListHelper(new ClientIrcListHelper(this)),
- _inputHandler(new ClientUserInputHandler(this)),
+ _inputHandler(0),
_messageModel(0),
_messageProcessor(0),
_connectedToCore(false),
_bufferModel = new BufferModel(_networkModel);
_messageModel = mainUi()->createMessageModel(this);
_messageProcessor = mainUi()->createMessageProcessor(this);
+ _inputHandler = new ClientUserInputHandler(this);
SignalProxy *p = signalProxy();
}
}
-/*** ***/
+/*** User input handling ***/
+
void Client::userInput(const BufferInfo &bufferInfo, const QString &message) {
- inputHandler()->handleUserInput(bufferInfo, message);
+ // we need to make sure that AliasManager is ready before processing input
+ if(aliasManager() && aliasManager()->isInitialized())
+ inputHandler()->handleUserInput(bufferInfo, message);
+ else
+ instance()-> _userInputBuffer.append(qMakePair(bufferInfo, message));
+}
+
+void Client::sendBufferedUserInput() {
+ for(int i = 0; i < _userInputBuffer.count(); i++)
+ userInput(_userInputBuffer.at(i).first, _userInputBuffer.at(i).second);
+
+ _userInputBuffer.clear();
}
/*** core connection stuff ***/
connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(requestInitialBacklog()));
connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView()));
+ // create AliasManager
+ Q_ASSERT(!_aliasManager);
+ _aliasManager = new ClientAliasManager(this);
+ connect(aliasManager(), SIGNAL(initDone()), SLOT(sendBufferedUserInput()));
+ signalProxy()->synchronize(aliasManager());
+
_syncedToCore = true;
emit connected();
emit coreConnectionStateChanged(true);
_bufferViewManager = 0;
}
+ if(_aliasManager) {
+ _aliasManager->deleteLater();
+ _aliasManager = 0;
+ }
+
+ // we probably don't want to save pending input for reconnect
+ _userInputBuffer.clear();
+
_messageModel->clear();
_networkModel->clear();
Quassel::logFatalMessage(msg);
} else {
QString msgString = QString("%1\n").arg(msg);
+
+ //Check to see if there is an instance around, else we risk recursions
+ //when calling instance() and creating new ones.
+ if (!instanceExists())
+ return;
+
instance()->_debugLog << msgString;
emit instance()->logUpdated(msgString);
}