#include <QDebug>
-IrcServerHandler::IrcServerHandler(NetworkConnection *parent)
- : BasicHandler(parent),
- networkConnection(parent) {
- _whois = false;
+IrcServerHandler::IrcServerHandler(NetworkConnection *parent) : BasicHandler(parent) {
+ _whois = false;
}
IrcServerHandler::~IrcServerHandler() {
}
-QString IrcServerHandler::serverDecode(const QByteArray &string) {
- return networkConnection->serverDecode(string);
-}
-
-QStringList IrcServerHandler::serverDecode(const QList<QByteArray> &stringlist) {
- QStringList list;
- foreach(QByteArray s, stringlist) list << networkConnection->serverDecode(s);
- return list;
-}
-
-QString IrcServerHandler::bufferDecode(const QString &bufferName, const QByteArray &string) {
- return networkConnection->bufferDecode(bufferName, string);
-}
-
-QStringList IrcServerHandler::bufferDecode(const QString &bufferName, const QList<QByteArray> &stringlist) {
- QStringList list;
- foreach(QByteArray s, stringlist) list << networkConnection->bufferDecode(bufferName, s);
- return list;
-}
-
-QString IrcServerHandler::userDecode(const QString &userNick, const QByteArray &string) {
- return networkConnection->userDecode(userNick, string);
-}
-
-QStringList IrcServerHandler::userDecode(const QString &userNick, const QList<QByteArray> &stringlist) {
- QStringList list;
- foreach(QByteArray s, stringlist) list << networkConnection->userDecode(userNick, s);
- return list;
-}
-
/*! Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */
void IrcServerHandler::handleServerMsg(QByteArray msg) {
try {
void IrcServerHandler::handleKick(QString prefix, QList<QByteArray> params) {
network()->updateNickFromMask(prefix);
- IrcUser *victim = network()->ircUser(serverDecode(params[1]));
+ IrcUser *victim = network()->ircUser(params[1]);
QString channel = serverDecode(params[0]);
Q_ASSERT(victim);
QString msg;
if(params.count() > 2) // someone got a reason!
- msg = QString("%1 %2").arg(victim->nick()).arg(bufferDecode(channel, params[2]));
+ msg = QString("%1 %2").arg(victim->nick()).arg(channelDecode(channel, params[2]));
else
msg = victim->nick();
return;
}
- if(network()->isChannelName(params[0])) {
+ if(network()->isChannelName(serverDecode(params[0]))) {
// Channel Modes
emit displayMsg(Message::Mode, BufferInfo::ChannelBuffer, serverDecode(params[0]), serverDecode(params).join(" "), prefix);
void IrcServerHandler::handleNotice(QString prefix, QList<QByteArray> params) {
if(params.count() < 2) {
- qWarning() << "IrcServerHandler::handleNotice(): not enoug Parameters:" << prefix << serverDecode(params);
+ qWarning() << "IrcServerHandler::handleNotice(): not enough Parameters:" << prefix << serverDecode(params);
return;
}
? nickFromMask(prefix)
: prefix;
- networkConnection->ctcpHandler()->parse(Message::Notice, sender, target, userDecode(prefix, params[1]));
+ networkConnection()->ctcpHandler()->parse(Message::Notice, sender, target, userDecode(sender, params[1]));
}
void IrcServerHandler::handlePart(QString prefix, QList<QByteArray> params) {
void IrcServerHandler::handlePing(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix);
- emit putCmd("PONG", serverDecode(params));
+ putCmd("PONG", params);
}
void IrcServerHandler::handlePrivmsg(QString prefix, QList<QByteArray> params) {
// it's possible to pack multiple privmsgs into one param using ctcp
// - > we let the ctcpHandler do the work
- networkConnection->ctcpHandler()->parse(Message::Plain, prefix, target, userDecode(ircuser->nick(), params[1]));
+ networkConnection()->ctcpHandler()->parse(Message::Plain, prefix, target, userDecode(ircuser->nick(), params[1]));
}
void IrcServerHandler::handleQuit(QString prefix, QList<QByteArray> params) {
void IrcServerHandler::handleTopic(QString prefix, QList<QByteArray> params) {
IrcUser *ircuser = network()->updateNickFromMask(prefix);
QString channel = serverDecode(params[0]);
- QString topic = bufferDecode(channel, params[1]);
+ QString topic = channelDecode(channel, params[1]);
Q_ASSERT(ircuser);
network()->ircChannel(channel)->setTopic(topic);
void IrcServerHandler::handle301(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix);
QString nickName = serverDecode(params[0]);
- QString awayMessage = serverDecode(params.last());
+ QString awayMessage = userDecode(nickName, params.last());
IrcUser *ircuser = network()->ircUser(nickName);
if(ircuser) {
(real life: "<nick> <integer> <integer> :seconds idle, signon time) */
//TODO: parse real life message
void IrcServerHandler::handle317(QString prefix, QList<QByteArray> params) {
- Q_UNUSED(prefix)
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
+ Q_UNUSED(prefix);
+ QString nick = serverDecode(params[0]);
+ IrcUser *ircuser = network()->ircUser(nick);
if(ircuser) {
QDateTime now = QDateTime::currentDateTime();
int idleSecs = serverDecode(params[1]).toInt();
ircuser->setIdleTime(now.addSecs(idleSecs));
emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 seconds").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now)));
} else {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(serverDecode(params).join(" ")));
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" ")));
}
}
void IrcServerHandler::handle332(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix);
QString channel = serverDecode(params[0]);
- QString topic = bufferDecode(channel, params[1]);
+ QString topic = channelDecode(channel, params[1]);
network()->ircChannel(channel)->setTopic(topic);
emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("Topic for %1 is \"%2\"").arg(channel, topic));
}
void IrcServerHandler::handle333(QString prefix, QList<QByteArray> params) {
Q_UNUSED(prefix);
QString channel = serverDecode(params[0]);
- emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("Topic set by %1 on %2") .arg(bufferDecode(channel, params[1]), QDateTime::fromTime_t(bufferDecode(channel, params[2]).toUInt()).toString()));
+ emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel,
+ tr("Topic set by %1 on %2") .arg(serverDecode(params[1]), QDateTime::fromTime_t(channelDecode(channel, params[2]).toUInt()).toString()));
}
/* RPL_WHOREPLY: "<channel> <user> <host> <server> <nick>
// if there is a problem while connecting to the server -> we handle it
// but only if our connection has not been finished yet...
- if(!networkConnection->network()->currentServer().isEmpty())
+ if(!network()->currentServer().isEmpty())
return;
tryNextNick(errnick);
}
void IrcServerHandler::tryNextNick(const QString &errnick) {
- QStringList desiredNicks = networkConnection->coreSession()->identity(networkConnection->network()->identity())->nicks();
+ QStringList desiredNicks = networkConnection()->coreSession()->identity(network()->identity())->nicks();
int nextNick = desiredNicks.indexOf(errnick) + 1;
if(desiredNicks.size() > nextNick) {
- putCmd("NICK", QStringList(desiredNicks[nextNick]));
+ putCmd("NICK", serverEncode(desiredNicks[nextNick]));
} else {
emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("No free and valid nicks in nicklist found. use: /nick <othernick> to continue"));
}