#include <QDateTime>
#include "client.h"
+#include "clientaliasmanager.h"
#include "clientuserinputhandler.h"
#include "clientsettings.h"
+#include "execwrapper.h"
#include "ircuser.h"
#include "network.h"
ClientUserInputHandler::ClientUserInputHandler(QObject *parent)
-: QObject(parent),
- _initialized(false)
+: QObject(parent)
{
TabCompletionSettings s;
s.notify("CompletionSuffix", this, SLOT(completionSuffixChanged(QVariant)));
completionSuffixChanged(s.completionSuffix());
-
- // we need this signal for future connects to reset the data;
- connect(Client::instance(), SIGNAL(connected()), SLOT(clientConnected()));
- connect(Client::instance(), SIGNAL(disconnected()), SLOT(clientDisconnected()));
- if(Client::isConnected())
- clientConnected();
-}
-
-void ClientUserInputHandler::clientConnected() {
- _aliasManager = ClientAliasManager();
- Client::signalProxy()->synchronize(&_aliasManager);
- connect(&_aliasManager, SIGNAL(initDone()), SLOT(initDone()));
-}
-
-void ClientUserInputHandler::clientDisconnected() {
- // clear alias manager
- _aliasManager = ClientAliasManager();
- _initialized = false;
-}
-
-void ClientUserInputHandler::initDone() {
- _initialized = true;
- for(int i = 0; i < _inputBuffer.count(); i++)
- handleUserInput(_inputBuffer.at(i).first, _inputBuffer.at(i).second);
- _inputBuffer.clear();
}
void ClientUserInputHandler::completionSuffixChanged(const QVariant &v) {
// this would be the place for a client-side hook
void ClientUserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QString &msg) {
- if(!_initialized) { // aliases not yet synced
- _inputBuffer.append(qMakePair(bufferInfo, msg));
- return;
- }
if(!msg.startsWith('/')) {
if(_nickRx.indexIn(msg) == 0) {
}
}
- AliasManager::CommandList clist = _aliasManager.processInput(bufferInfo, msg);
+ AliasManager::CommandList clist = Client::aliasManager()->processInput(bufferInfo, msg);
+
+ for(int i = 0; i < clist.count(); i++) {
+ QString cmd = clist.at(i).second.section(' ', 0, 0).remove(0, 1).toUpper();
+ if(cmd == "EXEC")
+ handleExec(clist.at(i).first, clist.at(i).second.section(' ', 1));
+ else
+ emit sendInput(clist.at(i).first, clist.at(i).second);
+ }
+}
- for(int i = 0; i < clist.count(); i++)
- emit sendInput(clist.at(i).first, clist.at(i).second);
+void ClientUserInputHandler::handleExec(const BufferInfo &bufferInfo, const QString &execString) {
+ ExecWrapper *exec = new ExecWrapper(this); // gets suicidal when it's done
+ exec->start(bufferInfo, execString);
}