X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fuserinputhandler.cpp;h=deddc925f10acfefb189951919ff08652e6f8684;hp=ee335e6c0dc9098a7c39ca7bd2e7050141665fdd;hb=82dd90f4684db4240311edc13bd3707772e0dbe8;hpb=f530849ae07b8b3de58d70a5a47559ab90df43b7 diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index ee335e6c..deddc925 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -57,13 +57,16 @@ void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &m Q_UNUSED(bufferInfo) QString awayMsg = msg; + IrcUser *me = network()->me(); + // if there is no message supplied we have to check if we are already away or not if(msg.isEmpty()) { - IrcUser *me = network()->me(); if(me && !me->isAway()) awayMsg = networkConnection()->identity()->awayReason(); } - + if(me) + me->setAwayMessage(awayMsg); + putCmd("AWAY", serverEncode(awayMsg)); } @@ -143,13 +146,6 @@ void UserInputHandler::handleInvite(const BufferInfo &bufferInfo, const QString emit putCmd("INVITE", serverEncode(params)); } -void UserInputHandler::handleJ(const BufferInfo &bufferInfo, const QString &msg) { - QString trimmed = msg.trimmed(); - if(trimmed.length() == 0) return; - if(trimmed[0].isLetter()) trimmed.prepend("#"); - handleJoin(bufferInfo, trimmed); -} - void UserInputHandler::handleJoin(const BufferInfo &bufferInfo, const QString &msg) { Q_UNUSED(bufferInfo) QStringList params = msg.trimmed().split(" "); @@ -193,7 +189,6 @@ void UserInputHandler::handleList(const BufferInfo &bufferInfo, const QString &m emit putCmd("LIST", serverEncode(msg.split(' ', QString::SkipEmptyParts))); } - void UserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString &msg) { if(bufferInfo.bufferName().isEmpty()) return; // server buffer networkConnection()->ctcpHandler()->query(bufferInfo.bufferName(), "ACTION", msg); @@ -202,8 +197,14 @@ void UserInputHandler::handleMe(const BufferInfo &bufferInfo, const QString &msg void UserInputHandler::handleMode(const BufferInfo &bufferInfo, const QString &msg) { Q_UNUSED(bufferInfo) + + QStringList params = msg.split(' ', QString::SkipEmptyParts); + // if the first argument is neither a channel nor us (user modes are only to oneself) the current buffer is assumed to be the target + if(!params.isEmpty() && !network()->isChannelName(params[0]) && !network()->isMyNick(params[0])) + params.prepend(bufferInfo.bufferName()); + // TODO handle correct encoding for buffer modes (channelEncode()) - emit putCmd("MODE", serverEncode(msg.split(' ', QString::SkipEmptyParts))); + emit putCmd("MODE", serverEncode(params)); } // TODO: show privmsgs @@ -258,6 +259,16 @@ void UserInputHandler::handlePart(const BufferInfo &bufferInfo, const QString &m emit putCmd("PART", params); } +void UserInputHandler::handlePing(const BufferInfo &bufferInfo, const QString &msg) { + Q_UNUSED(bufferInfo) + + QString param = msg; + if(param.isEmpty()) + param = QTime::currentTime().toString("hh:mm:ss.zzz"); + + putCmd("PING", serverEncode(param)); +} + // TODO: implement queries void UserInputHandler::handleQuery(const BufferInfo &bufferInfo, const QString &msg) { Q_UNUSED(bufferInfo) @@ -331,8 +342,29 @@ void UserInputHandler::handleWhowas(const BufferInfo &bufferInfo, const QString } void UserInputHandler::defaultHandler(QString cmd, const BufferInfo &bufferInfo, const QString &msg) { - Q_UNUSED(bufferInfo) + for(int i = 0; i < coreSession()->aliasManager().count(); i++) { + if(coreSession()->aliasManager()[i].name.toLower() == cmd.toLower()) { + expand(coreSession()->aliasManager()[i].expansion, bufferInfo, msg); + return; + } + } emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: %1 %2").arg(cmd).arg(msg)); } +void UserInputHandler::expand(const QString &alias, const BufferInfo &bufferInfo, const QString &msg) { + QStringList commands = alias.split(QRegExp("; ?")); + QStringList params = msg.split(' '); + for(int i = 0; i < commands.count(); i++) { + QString command = commands[i]; + for(int j = params.count(); j > 0; j--) { + command = command.replace(QString("$%1").arg(j), params[j - 1]); + } + command = command.replace("$0", msg); + command = command.replace("$channelname", bufferInfo.bufferName()); + command = command.replace("$currentnick", network()->myNick()); + handleUserInput(bufferInfo, command); + } +} + +