|
@@ -23,41 +23,47 @@
|
23
|
23
|
package com.dmdirc.parser.irc;
|
24
|
24
|
|
25
|
25
|
import com.dmdirc.parser.events.DebugInfoEvent;
|
|
26
|
+import com.dmdirc.parser.events.NickInUseEvent;
|
26
|
27
|
import com.dmdirc.parser.interfaces.Parser;
|
27
|
28
|
|
28
|
29
|
import java.util.Date;
|
29
|
30
|
|
|
31
|
+import net.engio.mbassy.listener.Handler;
|
|
32
|
+import net.engio.mbassy.listener.Listener;
|
|
33
|
+import net.engio.mbassy.listener.References;
|
|
34
|
+
|
30
|
35
|
/**
|
31
|
36
|
* Simple nick in use handler that tries the alternative nickname, then prepends a character until
|
32
|
37
|
* it gets a nickname.
|
33
|
38
|
*/
|
|
39
|
+@Listener(references = References.Strong)
|
34
|
40
|
public class SimpleNickInUseHandler {
|
35
|
41
|
|
36
|
42
|
private final String altNickname;
|
37
|
43
|
private final char prependChar;
|
38
|
44
|
private boolean triedAlt;
|
39
|
45
|
|
40
|
|
- public SimpleNickInUseHandler(final String altNickname, final char prependChar) {
|
|
46
|
+ SimpleNickInUseHandler(final String altNickname, final char prependChar) {
|
41
|
47
|
this.altNickname = altNickname;
|
42
|
48
|
this.prependChar = prependChar;
|
43
|
49
|
}
|
44
|
50
|
|
45
|
|
- // TODO: Subscribe
|
46
|
|
- public void onNickInUse(final Parser parser, final Date date, final String nickname) {
|
47
|
|
- final IRCParser ircParser = (IRCParser) parser;
|
|
51
|
+ @Handler
|
|
52
|
+ public void onNickInUse(final NickInUseEvent event) {
|
|
53
|
+ final IRCParser parser = (IRCParser) event.getParser();
|
48
|
54
|
callDebugInfo(parser, IRCParser.DEBUG_INFO, "No Nick in use Handler.");
|
49
|
|
- if (!ircParser.got001) {
|
|
55
|
+ if (!parser.got001) {
|
50
|
56
|
callDebugInfo(parser, IRCParser.DEBUG_INFO, "Using inbuilt handler");
|
51
|
57
|
// If this is before 001 we will try and get a nickname, else we will leave the
|
52
|
58
|
// nick as-is
|
53
|
59
|
if (triedAlt) {
|
54
|
|
- final String magicAltNick = prependChar + ircParser.getMyInfo().getNickname();
|
55
|
|
- if (parser.getStringConverter().equalsIgnoreCase(ircParser.thinkNickname,
|
|
60
|
+ final String magicAltNick = prependChar + parser.getMyInfo().getNickname();
|
|
61
|
+ if (parser.getStringConverter().equalsIgnoreCase(parser.thinkNickname,
|
56
|
62
|
altNickname)
|
57
|
63
|
&& !altNickname.equalsIgnoreCase(magicAltNick)) {
|
58
|
|
- ircParser.thinkNickname = ircParser.getMyInfo().getNickname();
|
|
64
|
+ parser.thinkNickname = parser.getMyInfo().getNickname();
|
59
|
65
|
}
|
60
|
|
- parser.getLocalClient().setNickname(prependChar + ircParser.thinkNickname);
|
|
66
|
+ parser.getLocalClient().setNickname(prependChar + parser.thinkNickname);
|
61
|
67
|
} else {
|
62
|
68
|
parser.getLocalClient().setNickname(altNickname);
|
63
|
69
|
triedAlt = true;
|
|
@@ -69,4 +75,17 @@ public class SimpleNickInUseHandler {
|
69
|
75
|
parser.getCallbackManager().publish(
|
70
|
76
|
new DebugInfoEvent(parser, new Date(), level, data));
|
71
|
77
|
}
|
|
78
|
+
|
|
79
|
+ /**
|
|
80
|
+ * Installs a new {@link SimpleNickInUseHandler} on the given parser.
|
|
81
|
+ *
|
|
82
|
+ * @param parser The parser to install the handler on.
|
|
83
|
+ * @param altNickname The alternate nickname to try using.
|
|
84
|
+ * @param prependChar The character to prepend if the alt nickname is in use.
|
|
85
|
+ */
|
|
86
|
+ public static void install(
|
|
87
|
+ final Parser parser, final String altNickname, final char prependChar) {
|
|
88
|
+ parser.getCallbackManager().subscribe(new SimpleNickInUseHandler(altNickname, prependChar));
|
|
89
|
+ }
|
|
90
|
+
|
72
|
91
|
}
|