+void IrcServerHandler::handle319(const QString &prefix, const QList<QByteArray> ¶ms) {
+ Q_UNUSED(prefix)
+ if(!checkParamCount("IrcServerHandler::handle319()", params, 2))
+ return;
+
+ QString nick = serverDecode(params.first());
+ QStringList op;
+ QStringList voice;
+ QStringList user;
+ foreach (QString channel, serverDecode(params.last()).split(" ")) {
+ if(channel.startsWith("@"))
+ op.append(channel.remove(0,1));
+ else if(channel.startsWith("+"))
+ voice.append(channel.remove(0,1));
+ else
+ user.append(channel);
+ }
+ if(!user.isEmpty())
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is a user on channels: %2").arg(nick).arg(user.join(" ")));
+ if(!voice.isEmpty())
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 has voice on channels: %2").arg(nick).arg(voice.join(" ")));
+ if(!op.isEmpty())
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is an operator on channels: %2").arg(nick).arg(op.join(" ")));
+}
+
+/* RPL_WHOISVIRT - "<nick> is identified to services" */
+void IrcServerHandler::handle320(const QString &prefix, const QList<QByteArray> ¶ms) {
+ Q_UNUSED(prefix);
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
+}
+
+/* RPL_LIST - "<channel> <# visible> :<topic>" */
+void IrcServerHandler::handle322(const QString &prefix, const QList<QByteArray> ¶ms) {
+ Q_UNUSED(prefix)
+ QString channelName;
+ quint32 userCount = 0;
+ QString topic;
+
+ int paramCount = params.count();
+ switch(paramCount) {
+ case 3:
+ topic = serverDecode(params[2]);
+ case 2:
+ userCount = serverDecode(params[1]).toUInt();
+ case 1:
+ channelName = serverDecode(params[0]);
+ default:
+ break;
+ }
+ if(!coreSession()->ircListHelper()->addChannel(network()->networkId(), channelName, userCount, topic))
+ emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Channel %1 has %2 users. Topic is: %3").arg(channelName).arg(userCount).arg(topic));
+}
+
+/* RPL_LISTEND ":End of LIST" */
+void IrcServerHandler::handle323(const QString &prefix, const QList<QByteArray> ¶ms) {