// IRC SERVER HANDLER
//******************************/
void IrcServerHandler::handleJoin(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_ASSERT(params.count() == 1);
+ if(params.count() < 1) return;
QString channel = serverDecode(params[0]);
IrcUser *ircuser = network()->updateNickFromMask(prefix);
emit displayMsg(Message::Join, BufferInfo::ChannelBuffer, channel, channel, prefix);
//qDebug() << "IrcServerHandler::handleJoin()" << prefix << params;
ircuser->joinChannel(channel);
- if(network()->isMe(ircuser)) network()->addPersistentChannel(channel, networkConnection()->channelKey(channel));
+ if(network()->isMe(ircuser)) networkConnection()->setChannelJoined(channel);
}
void IrcServerHandler::handleKick(const QString &prefix, const QList<QByteArray> ¶ms) {
network()->updateNickFromMask(prefix);
IrcUser *victim = network()->ircUser(params[1]);
+ if(!victim) return;
QString channel = serverDecode(params[0]);
- Q_ASSERT(victim);
victim->partChannel(channel);
msg = userDecode(ircuser->nick(), params[1]);
emit displayMsg(Message::Part, BufferInfo::ChannelBuffer, channel, msg, prefix);
- if(network()->isMe(ircuser)) network()->removePersistentChannel(channel);
+ if(network()->isMe(ircuser)) networkConnection()->setChannelParted(channel);
}
void IrcServerHandler::handlePing(const QString &prefix, const QList<QByteArray> ¶ms) {
void IrcServerHandler::handleQuit(const QString &prefix, const QList<QByteArray> ¶ms) {
IrcUser *ircuser = network()->updateNickFromMask(prefix);
- Q_ASSERT(ircuser);
+ if(!ircuser) return;
QString msg;
if(params.count())
void IrcServerHandler::handleTopic(const QString &prefix, const QList<QByteArray> ¶ms) {
IrcUser *ircuser = network()->updateNickFromMask(prefix);
+ if(!ircuser) return;
QString channel = serverDecode(params[0]);
- QString topic = channelDecode(channel, params[1]);
- Q_ASSERT(ircuser);
+ QString topic;
+ if(params.count() >= 2) topic = channelDecode(channel, params[1]);
network()->ircChannel(channel)->setTopic(topic);
/* RPL_ENDOFWHO: "<name> :End of WHO list" */
void IrcServerHandler::handle315(const QString &prefix, const QList<QByteArray> ¶ms) {
Q_UNUSED(prefix)
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
+ // FIXME temporarily made silent
+ Q_UNUSED(params)
+ // emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
}
/* RPL_WHOISIDLE - "<nick> <integer> :seconds idle"
ircuser->setRealName(serverDecode(params.last()).section(" ", 1));
}
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
+ // FIXME temporarily made silent
+ //emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
}
/* RPL_NAMREPLY */
// we don't use this information at the time beeing
QString channelname = serverDecode(params[1]);
+ IrcChannel *channel = network()->ircChannel(channelname);
+ if(!channel) {
+ qWarning() << "IrcServerHandler::handle353(): received unknown target channel:" << channelname;
+ return;
+ }
+
+ QStringList nicks;
+ QStringList modes;
+
foreach(QString nick, serverDecode(params[2]).split(' ')) {
QString mode = QString();
nick = nick.mid(1);
}
- IrcUser *ircuser = network()->newIrcUser(nick);
- ircuser->joinChannel(channelname);
-
- if(!mode.isNull())
- network()->ircChannel(channelname)->addUserMode(ircuser, mode);
+ nicks << nick;
+ modes << mode;
}
+
+ channel->joinIrcUsers(nicks, modes);
}
/* RPL_ENDOFWHOWAS - "<nick> :End of WHOWAS" */