X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fuserinputhandler.cpp;h=7dec1dc263bddb7d527434ba8428a347b96c2d4b;hb=6bf23e48f2591fc189fdefbf31f5a224169e61f4;hp=c42c475f1a969ea4997522ccfe02c9976cb6003a;hpb=0f206dd896485276cf25025e562c812b8c7fc5da;p=quassel.git diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index c42c475f..7dec1dc2 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -37,7 +37,12 @@ void UserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QStri return; QString cmd; QString msg = msg_; - if(!msg.startsWith('/')) { + // leading slashes indicate there's a command to call unless there is anothere one in the first section (like a path /proc/cpuinfo) + int secondSlashPos = msg.indexOf('/', 1); + int firstSpacePos = msg.indexOf(' '); + if(!msg.startsWith('/') || (secondSlashPos != -1 && (secondSlashPos < firstSpacePos || firstSpacePos == -1))) { + if(msg.startsWith("//")) + msg.remove(0, 1); // //asdf is transformed to /asdf cmd = QString("SAY"); } else { cmd = msg.section(' ', 0, 0).remove(0, 1).toUpper(); @@ -57,13 +62,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 +151,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(" "); @@ -263,6 +264,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) @@ -336,8 +347,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); + } +} + +