void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &msg) {
Q_UNUSED(bufferInfo)
- putCmd("AWAY", serverEncode(msg));
+
+ QString awayMsg = msg;
+ // 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();
+ }
+
+ putCmd("AWAY", serverEncode(awayMsg));
}
void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) {
void UserInputHandler::handleKick(const BufferInfo &bufferInfo, const QString &msg) {
QString nick = msg.section(' ', 0, 0, QString::SectionSkipEmpty);
QString reason = msg.section(' ', 1, -1, QString::SectionSkipEmpty).trimmed();
- if(reason.isEmpty()) reason = networkConnection()->identity()->kickReason();
+ if(reason.isEmpty())
+ reason = networkConnection()->identity()->kickReason();
+
QList<QByteArray> params;
params << serverEncode(bufferInfo.bufferName()) << serverEncode(nick) << channelEncode(bufferInfo.bufferName(), reason);
emit putCmd("KICK", params);
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);
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
void UserInputHandler::handlePart(const BufferInfo &bufferInfo, const QString &msg) {
QList<QByteArray> params;
- params << serverEncode(bufferInfo.bufferName()) << channelEncode(bufferInfo.bufferName(), msg);
+ QString partReason;
+
+ // msg might contain either a channel name and/or a reaon, so we have to check if the first word is a known channel
+ QString channelName = msg.section(' ', 0, 0);
+ if(channelName.isEmpty() || !network()->ircChannel(channelName)) {
+ channelName = bufferInfo.bufferName();
+ partReason = msg;
+ } else {
+ partReason = msg.mid(channelName.length() + 1);
+ }
+
+ if(partReason.isEmpty())
+ partReason = networkConnection()->identity()->partReason();
+
+ params << serverEncode(channelName) << channelEncode(bufferInfo.bufferName(), partReason);
emit putCmd("PART", params);
}
void UserInputHandler::handleQuit(const BufferInfo &bufferInfo, const QString &msg) {
Q_UNUSED(bufferInfo)
- emit putCmd("QUIT", serverEncode(msg));
+
+ QString quitReason;
+ if(msg.isEmpty())
+ quitReason = networkConnection()->identity()->quitReason();
+ else
+ quitReason = msg;
+
+ emit putCmd("QUIT", serverEncode(quitReason));
+ networkConnection()->disconnectFromIrc();
}
void UserInputHandler::handleQuote(const BufferInfo &bufferInfo, const QString &msg) {