- emit displayMsg(Message::Error, "", tr("Nick %1 is already taken").arg(errnick));
- emit displayMsg(Message::Error, "", tr("Please use /nick <othernick> to continue your IRC-Session!"));
- // FIXME!
-
-// // if there is a problem while connecting to the server -> we handle it
-// // TODO rely on another source...
-// if(currentServer.isEmpty()) {
-// QStringList desiredNicks = identity["NickList"].toStringList();
-// int nextNick = desiredNicks.indexOf(errnick) + 1;
-// if (desiredNicks.size() > nextNick) {
-// putCmd("NICK", QStringList(desiredNicks[nextNick]));
-// } else {
-// emit displayMsg(Message::Error, "", tr("No free and valid nicks in nicklist found. use: /nick <othernick> to continue"));
-// }
-// }
-}
-
-/***********************************************************************************/
+ 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();
+}
+
+/* */
+
+// FIXME networkConnection()->setChannelKey("") for all ERR replies indicating that a JOIN went wrong
+// mostly, these are codes in the 47x range
+
+/* */