+/* ERR_UNAVAILRESOURCE */
+void IrcServerHandler::handle437(const QString &prefix, const QList<QByteArray> ¶ms) {
+ Q_UNUSED(prefix);
+ if(!checkParamCount("IrcServerHandler::handle437()", params, 1))
+ return;
+
+ QString errnick = serverDecode(params[0]);
+ emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Nick/channel is temporarily unavailable: %1").arg(errnick));
+
+ // if there is a problem while connecting to the server -> we handle it
+ // but only if our connection has not been finished yet...
+ if(!network()->currentServer().isEmpty())
+ return;
+
+ if(!network()->isChannelName(errnick))
+ tryNextNick(errnick);
+}
+
+/* Handle signals from Netsplit objects */
+
+void IrcServerHandler::handleNetsplitJoin(const QString &channel, const QStringList &users, const QStringList &modes, const QString& quitMessage)
+{
+ IrcChannel *ircChannel = network()->ircChannel(channel);
+ if(!ircChannel) {
+ return;
+ }
+ QList<IrcUser *> ircUsers;
+ QStringList newModes = modes;
+ QStringList newUsers = users;
+
+ foreach(QString user, users) {
+ IrcUser *iu = network()->ircUser(nickFromMask(user));
+ if(iu)
+ ircUsers.append(iu);
+ else { // the user already quit
+ int idx = users.indexOf(user);
+ newUsers.removeAt(idx);
+ newModes.removeAt(idx);
+ }
+ }
+
+ QString msg = newUsers.join("#:#").append("#:#").append(quitMessage);
+ emit displayMsg(Message::NetsplitJoin, BufferInfo::ChannelBuffer, channel, msg);
+ ircChannel->joinIrcUsers(ircUsers, newModes);
+}
+
+void IrcServerHandler::handleNetsplitQuit(const QString &channel, const QStringList &users, const QString& quitMessage)
+{
+ QString msg = users.join("#:#").append("#:#").append(quitMessage);
+ emit displayMsg(Message::NetsplitQuit, BufferInfo::ChannelBuffer, channel, msg);
+ foreach(QString user, users) {
+ IrcUser *iu = network()->ircUser(nickFromMask(user));
+ if(iu)
+ iu->quit();
+ }
+}
+
+void IrcServerHandler::handleEarlyNetsplitJoin(const QString &channel, const QStringList &users, const QStringList &modes) {
+ IrcChannel *ircChannel = network()->ircChannel(channel);
+ if(!ircChannel) {
+ qDebug() << "handleEarlyNetsplitJoin(): channel " << channel << " invalid";
+ return;
+ }
+ QList<IrcUser *> ircUsers;
+ QStringList newModes = modes;
+
+ foreach(QString user, users) {
+ IrcUser *iu = network()->updateNickFromMask(user);
+ if(iu) {
+ ircUsers.append(iu);
+ emit displayMsg(Message::Join, BufferInfo::ChannelBuffer, channel, channel, user);
+ }
+ else {
+ newModes.removeAt(users.indexOf(user));
+ }
+ }
+ ircChannel->joinIrcUsers(ircUsers, newModes);
+}
+void IrcServerHandler::handleNetsplitFinished()
+{
+ Netsplit* n = qobject_cast<Netsplit*>(sender());
+ _netsplits.remove(_netsplits.key(n));
+ n->deleteLater();
+}
+