X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient%2Fclient.cpp;h=c2a3e1653607ef066780d8e72eb93d1127bfd87c;hb=6d32c3e6a04a358789c469948d044715d6fb5aed;hp=759afcf96ec3dc851587c837cc579d4a2803875f;hpb=aadd816dbcae859ce9ac5b44d609bd3094b3d6fc;p=quassel.git diff --git a/src/client/client.cpp b/src/client/client.cpp index 759afcf9..c2a3e165 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -27,10 +27,12 @@ #include "buffersettings.h" #include "buffersyncer.h" #include "bufferviewconfig.h" +#include "clientaliasmanager.h" #include "clientbacklogmanager.h" #include "clientbufferviewmanager.h" #include "clientirclisthelper.h" #include "clientidentity.h" +#include "clientuserinputhandler.h" #include "ircchannel.h" #include "ircuser.h" #include "message.h" @@ -75,9 +77,11 @@ Client::Client(QObject *parent) _networkModel(0), _bufferModel(0), _bufferSyncer(0), + _aliasManager(0), _backlogManager(new ClientBacklogManager(this)), _bufferViewManager(0), _ircListHelper(new ClientIrcListHelper(this)), + _inputHandler(0), _messageModel(0), _messageProcessor(0), _connectedToCore(false), @@ -102,6 +106,7 @@ void Client::init() { _bufferModel = new BufferModel(_networkModel); _messageModel = mainUi()->createMessageModel(this); _messageProcessor = mainUi()->createMessageProcessor(this); + _inputHandler = new ClientUserInputHandler(this); SignalProxy *p = signalProxy(); @@ -109,7 +114,7 @@ void Client::init() { p->attachSlot(SIGNAL(displayStatusMsg(QString, QString)), this, SLOT(recvStatusMsg(QString, QString))); p->attachSlot(SIGNAL(bufferInfoUpdated(BufferInfo)), _networkModel, SLOT(bufferUpdated(BufferInfo))); - p->attachSignal(this, SIGNAL(sendInput(BufferInfo, QString))); + p->attachSignal(inputHandler(), SIGNAL(sendInput(BufferInfo, QString))); p->attachSignal(this, SIGNAL(requestNetworkStates())); p->attachSignal(this, SIGNAL(requestCreateIdentity(const Identity &, const QVariantMap &)), SIGNAL(createIdentity(const Identity &, const QVariantMap &))); @@ -263,9 +268,21 @@ void Client::coreIdentityRemoved(IdentityId id) { } } -/*** ***/ -void Client::userInput(BufferInfo bufferInfo, QString message) { - emit instance()->sendInput(bufferInfo, message); +/*** User input handling ***/ + +void Client::userInput(const BufferInfo &bufferInfo, const QString &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 ***/ @@ -301,6 +318,12 @@ void Client::setSyncedToCore() { 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); @@ -349,6 +372,14 @@ void Client::disconnectedFromCore() { _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();