/***************************************************************************
- * Copyright (C) 2005-07 by The Quassel Team *
+ * Copyright (C) 2005-07 by the Quassel IRC Team *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
+ * (at your option) version 3. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
QString channel = params[0];
IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
emit displayMsg(Message::Join, channel, channel, prefix);
-
+ qDebug() << "IrcServerHandler::handleJoin()" << prefix << params;
ircuser->joinChannel(channel);
}
}
void IrcServerHandler::handleMode(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
+ Q_UNUSED(params)
+
// if(isChannelName(params[0])) {
// // TODO only channel-user modes supported by now
// QString prefixes = serverSupports["PrefixModes"].toString();
QString oldnick = ircuser->nick();
foreach(QString channel, ircuser->channels()) {
- if(networkInfo()->isMyNick(oldnick))
- emit displayMsg(Message::Nick, channel, newnick, prefix);
- else
+ if(networkInfo()->isMyNick(oldnick)) {
emit displayMsg(Message::Nick, channel, newnick, newnick);
+ } else {
+ emit displayMsg(Message::Nick, channel, newnick, prefix);
+ }
}
ircuser->setNick(newnick);
}
}
void IrcServerHandler::handlePing(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
emit putCmd("PONG", params);
}
void IrcServerHandler::handlePrivmsg(QString prefix, QStringList params) {
networkInfo()->updateNickFromMask(prefix);
- Q_ASSERT(params.count() >= 2);
if(params.count()<2)
- emit displayMsg(Message::Plain, params[0], "", prefix);
- else {
- // it's possible to pack multiple privmsgs into one param using ctcp
- QStringList messages = server->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, params[0], params[1]);
-
- // are we the target or is it a channel?
- if(networkInfo()->isMyNick(params[0])) {
- foreach(QString message, messages) {
- if(!message.isEmpty()) {
- emit displayMsg(Message::Plain, "", message, prefix, Message::PrivMsg);
- }
+ params << QString("");
+
+ // it's possible to pack multiple privmsgs into one param using ctcp
+ QStringList messages = server->ctcpHandler()->parse(CtcpHandler::CtcpQuery, prefix, params[0], params[1]);
+
+ // are we the target or is it a channel?
+ if(networkInfo()->isMyNick(params[0])) {
+ foreach(QString message, messages) {
+ if(!message.isEmpty()) {
+ emit displayMsg(Message::Plain, "", message, prefix, Message::PrivMsg);
}
-
- } else {
- Q_ASSERT(isChannelName(params[0])); // should be channel!
- foreach(QString message, messages) {
- if(!message.isEmpty()) {
- emit displayMsg(Message::Plain, params[0], message, prefix);
- }
+ }
+
+ } else {
+ Q_ASSERT(isChannelName(params[0])); // should be channel!
+ foreach(QString message, messages) {
+ if(!message.isEmpty()) {
+ emit displayMsg(Message::Plain, params[0], message, prefix);
}
}
}
+
}
void IrcServerHandler::handleQuit(QString prefix, QStringList params) {
IrcUser *ircuser = networkInfo()->updateNickFromMask(prefix);
Q_ASSERT(ircuser);
+ qDebug() << "IrcServerHandler:handleQuit" << prefix << params;
QString msg;
if(params.count())
foreach(QString channel, ircuser->channels())
emit displayMsg(Message::Quit, channel, msg, prefix);
-
- ircuser->deleteLater();
+
+ networkInfo()->removeIrcUser(nickFromMask(prefix));
}
void IrcServerHandler::handleTopic(QString prefix, QStringList params) {
/* RPL_ISUPPORT */
// TODO Complete 005 handling, also use sensible defaults for non-sent stuff
void IrcServerHandler::handle005(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
QString rpl_isupport_suffix = params.takeLast();
if(rpl_isupport_suffix.toLower() != QString("are supported by this server")) {
qWarning() << "Received invalid RPL_ISUPPORT! Suffix is:" << rpl_isupport_suffix << "Excpected: are supported by this server";
/* RPL_NOTOPIC */
void IrcServerHandler::handle331(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
networkInfo()->ircChannel(params[0])->setTopic(QString());
emit displayMsg(Message::Server, params[0], tr("No topic is set for %1.").arg(params[0]));
}
/* RPL_TOPIC */
void IrcServerHandler::handle332(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
networkInfo()->ircChannel(params[0])->setTopic(params[1]);
emit displayMsg(Message::Server, params[0], tr("Topic for %1 is \"%2\"").arg(params[0]).arg(params[1]));
}
/* Topic set by... */
void IrcServerHandler::handle333(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
emit displayMsg(Message::Server, params[0], tr("Topic set by %1 on %2").arg(params[1]).arg(QDateTime::fromTime_t(params[2].toUInt()).toString()));
}
/* RPL_NAMREPLY */
void IrcServerHandler::handle353(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
params.removeFirst(); // either "=", "*" or "@" indicating a public, private or secret channel
QString channelname = params.takeFirst();
mode = networkInfo()->prefixToMode(nick[0]);
nick = nick.mid(1);
}
-
+
IrcUser *ircuser = networkInfo()->newIrcUser(nick);
ircuser->joinChannel(channelname);
/* ERR_ERRONEUSNICKNAME */
void IrcServerHandler::handle432(QString prefix, QStringList params) {
+ Q_UNUSED(prefix)
+ Q_UNUSED(params)
+ emit displayMsg(Message::Error, "", tr("Your desired nickname contains illegal characters!"));
+ emit displayMsg(Message::Error, "", tr("Please use /nick <othernick> to continue your IRC-Session!"));
+ // FIXME!
+
// if(params.size() < 2) {
// // handle unreal-ircd bug, where unreal ircd doesnt supply a TARGET in ERR_ERRONEUSNICKNAME during registration phase:
// // nick @@@
/* ERR_NICKNAMEINUSE */
void IrcServerHandler::handle433(QString prefix, QStringList params) {
-// QString errnick = params[0];
-// emit displayMsg(Message::Error, "", tr("Nick %1 is already taken").arg(errnick));
+ Q_UNUSED(prefix)
+ QString errnick = params[0];
+ emit displayMsg(Message::Error, "", tr("Nick %1 is already taken").arg(errnick));
+ emit displayMsg(Message::Error, "", tr("Please use /nick <othernick> to continue your IRC-Session!"));
+ // FIXME!
+
// // if there is a problem while connecting to the server -> we handle it
// // TODO rely on another source...
// if(currentServer.isEmpty()) {