// 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) {
// 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" */