Move nick changes into simple command handler.
[xudocci.git] / src / main / java / net / pterodactylus / irc / Connection.java
index 6bb747a..30344be 100644 (file)
@@ -32,12 +32,12 @@ import java.io.UnsupportedEncodingException;
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.net.SocketFactory;
 
+import net.pterodactylus.irc.connection.ChannelNickHandler;
 import net.pterodactylus.irc.connection.ChannelNotJoinedHandler;
 import net.pterodactylus.irc.connection.ConnectionEstablishHandler;
 import net.pterodactylus.irc.connection.CtcpHandler;
@@ -45,9 +45,9 @@ import net.pterodactylus.irc.connection.Handler;
 import net.pterodactylus.irc.connection.MessageHandler;
 import net.pterodactylus.irc.connection.MotdHandler;
 import net.pterodactylus.irc.connection.PrefixHandler;
+import net.pterodactylus.irc.connection.SimpleCommandHandler;
 import net.pterodactylus.irc.event.ChannelJoined;
 import net.pterodactylus.irc.event.ChannelLeft;
-import net.pterodactylus.irc.event.ChannelNicknames;
 import net.pterodactylus.irc.event.ChannelTopic;
 import net.pterodactylus.irc.event.ClientQuit;
 import net.pterodactylus.irc.event.ConnectionClosed;
@@ -64,7 +64,6 @@ import net.pterodactylus.xdcc.util.io.BandwidthCountingInputStream;
 import net.pterodactylus.xdcc.util.io.BandwidthCountingOutputStream;
 
 import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
 import com.google.common.io.Closeables;
@@ -364,12 +363,18 @@ public class Connection extends AbstractExecutionThreadService implements Servic
                try {
                        /* some status variables. */
                        boolean connected = true;
-                       Set<Nickname> nicks = Sets.newHashSet();
 
                        PrefixHandler prefixHandler = new PrefixHandler();
                        List<Handler> handlers = asList(
                                        new MessageHandler(eventBus, this, prefixHandler),
                                        new CtcpHandler(eventBus, this),
+                                       new ChannelNickHandler(eventBus, this, prefixHandler),
+                                       new SimpleCommandHandler()
+                                                       .addCommand("431", (s, p) -> eventBus.post(
+                                                                       new NoNicknameGivenReceived(this)))
+                                                       .addCommand("NICK", (s, p) -> eventBus.post(
+                                                                       new NicknameChanged(this, s.get(),
+                                                                                       p.get(0)))),
                                        new MotdHandler(eventBus, this),
                                        new ChannelNotJoinedHandler(eventBus, this),
                                        new ConnectionEstablishHandler(eventBus, this),
@@ -391,9 +396,7 @@ public class Connection extends AbstractExecutionThreadService implements Servic
                                }
 
                                /* 43x replies are for nick change errors. */
-                               if (command.equals("431")) {
-                                       eventBus.post(new NoNicknameGivenReceived(this, reply));
-                               } else if (command.equals("433")) {
+                               if (command.equals("433")) {
                                        if (!established.get()) {
                                                nickname = nicknameChooser.getNickname();
                                                connectionHandler.sendCommand("NICK", nickname);
@@ -401,10 +404,6 @@ public class Connection extends AbstractExecutionThreadService implements Servic
                                                eventBus.post(new NicknameInUseReceived(this, reply));
                                        }
 
-                               /* client stuff. */
-                               } else if (command.equalsIgnoreCase("NICK")) {
-                                       eventBus.post(new NicknameChanged(this, reply.source().get(), parameters.get(0)));
-
                                /* channel stuff. */
                                } else if (command.equalsIgnoreCase("JOIN")) {
                                        eventBus.post(new ChannelJoined(this, parameters.get(0), reply.source().get()));
@@ -412,17 +411,6 @@ public class Connection extends AbstractExecutionThreadService implements Servic
                                        /* no topic is set. */
                                } else if (command.equals("332")) {
                                        eventBus.post(new ChannelTopic(this, parameters.get(1), parameters.get(2)));
-                               } else if (command.equals("353")) {
-                                       for (String nickname : parameters.get(3).split(" ")) {
-                                               if (prefixHandler.isNickPrefixed(nickname)) {
-                                                       nicks.add(new Nickname(nickname.substring(1), nickname.substring(0, 1)));
-                                               } else {
-                                                       nicks.add(new Nickname(nickname, ""));
-                                               }
-                                       }
-                               } else if (command.equals("366")) {
-                                       eventBus.post(new ChannelNicknames(this, parameters.get(1), nicks));
-                                       nicks.clear();
                                } else if (command.equalsIgnoreCase("PART")) {
                                        eventBus.post(new ChannelLeft(this, parameters.get(0), reply.source().get(), getOptional(parameters, 1)));
                                } else if (command.equalsIgnoreCase("QUIT")) {