瀏覽代碼

Remove external usages of prefix mode bitmaps.

Prefix modes are now stored as a string, with the most important
mode at the start (e.g. "ohv").

Change-Id: Ie51e6bf8bf7a46e80295ed5cf000ffb4b0195e0b
Reviewed-on: http://gerrit.dmdirc.com/3954
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
changes/54/3954/2
Chris Smith 9 年之前
父節點
當前提交
f1adab8673

+ 48
- 87
src/com/dmdirc/parser/irc/IRCChannelClientInfo.java 查看文件

@@ -37,11 +37,13 @@ public class IRCChannelClientInfo implements ChannelClientInfo {
37 37
 
38 38
     /** Reference to ClientInfo object this represents. */
39 39
     private final IRCClientInfo cClient;
40
-    /** Integer representation of the channel modes assocated with this user. */
41
-    private long nModes;
42
-    /** Reference to the parser object that owns this channelclient, Used for modes. */
43
-    private final IRCParser myParser;
44
-    /** Reference to the channel object that owns this channelclient. */
40
+    /** The channel modes associated with this user. */
41
+    private String modes = "";
42
+    /** Manager to use when dealing with prefix modes. */
43
+    private final PrefixModeManager modeManager;
44
+    /** The parser to use to kick people. */
45
+    private final IRCParser parser;
46
+    /** Reference to the channel object that owns this channel client. */
45 47
     private final ChannelInfo myChannel;
46 48
     /** A Map to allow applications to attach misc data to this object. */
47 49
     private Map<Object, Object> myMap;
@@ -55,7 +57,8 @@ public class IRCChannelClientInfo implements ChannelClientInfo {
55 57
      */
56 58
     public IRCChannelClientInfo(final IRCParser tParser, final IRCClientInfo client, final ChannelInfo channel) {
57 59
         myMap = new HashMap<>();
58
-        myParser = tParser;
60
+        modeManager = tParser.prefixModes;
61
+        parser = tParser;
59 62
         cClient = client;
60 63
         myChannel = channel;
61 64
         cClient.addChannelClientInfo(this);
@@ -98,109 +101,45 @@ public class IRCChannelClientInfo implements ChannelClientInfo {
98 101
     /**
99 102
      * Set the modes this client has (Prefix modes).
100 103
      *
101
-     * @param nNewMode integer representing the modes this client has.
104
+     * @param modes The new modes this client has, sorted most-to-least important.
102 105
      */
103
-    public void setChanMode(final long nNewMode) {
104
-        nModes = nNewMode;
105
-    }
106
-
107
-    /**
108
-     * Get the modes this client has (Prefix modes).
109
-     *
110
-     * @return integer representing the modes this client has.
111
-     */
112
-    public long getChanMode() {
113
-        return nModes;
114
-    }
115
-
116
-    /**
117
-     * Get the modes this client has (Prefix modes) as a string.
118
-     * Returns all known modes that the client has.
119
-     * getChanModeStr(false).charAt(0) can be used to get the highest mode (o)
120
-     * getChanModeStr(true).charAt(0) can be used to get the highest prefix (@)
121
-     *
122
-     * @param bPrefix if this is true, prefixes will be returned (@+) not modes (ov)
123
-     * @return String representing the modes this client has.
124
-     */
125
-    public String getChanModeStr(final boolean bPrefix) {
126
-        final StringBuilder sModes = new StringBuilder();
127
-        final long nCurrentModes = this.getChanMode();
128
-
129
-        for (long i = myParser.prefixModes.getNextValue(); i > 0; i /= 2) {
130
-            if ((nCurrentModes & i) == i) {
131
-                for (char cTemp : myParser.prefixModes.getModes()) {
132
-                    final long nTemp = myParser.prefixModes.getValueOf(cTemp);
133
-                    if (nTemp == i) {
134
-                        if (bPrefix) {
135
-                            sModes.append(myParser.prefixModes.getPrefixFor(cTemp));
136
-                        } else {
137
-                            sModes.append(cTemp);
138
-                        }
139
-                        break;
140
-                    }
141
-                }
142
-            }
143
-        }
144
-
145
-        return sModes.toString();
106
+    public void setChanMode(final String modes) {
107
+        this.modes = modes;
146 108
     }
147 109
 
148 110
     @Override
149 111
     public String getAllModes() {
150
-        return getChanModeStr(false);
112
+        return modes;
151 113
     }
152 114
 
153 115
     @Override
154 116
     public String getAllModesPrefix() {
155
-        return getChanModeStr(true);
156
-    }
157
-
158
-    /**
159
-     * Get the value of the most important mode this client has (Prefix modes).
160
-     * A higher value, is a more important mode, 0 = no modes.
161
-     *
162
-     * @return integer representing the value of the most important mode.
163
-     */
164
-    public long getImportantModeValue() {
165
-        for (long i = myParser.prefixModes.getNextValue(); i > 0; i /= 2) {
166
-            if ((nModes & i) == i) {
167
-                return i;
168
-            }
169
-        }
170
-        return 0;
117
+        return modeManager.getPrefixesFor(modes);
171 118
     }
172 119
 
173 120
     @Override
174 121
     public String getImportantMode() {
175
-        String sModes = this.getChanModeStr(false);
176
-        if (!sModes.isEmpty()) {
177
-            sModes = Character.toString(sModes.charAt(0));
178
-        }
179
-        return sModes;
122
+        return modes.isEmpty() ? "" : modes.substring(0, 1);
180 123
     }
181 124
 
182 125
     @Override
183 126
     public String getImportantModePrefix() {
184
-        String sModes = this.getChanModeStr(true);
185
-        if (!sModes.isEmpty()) {
186
-            sModes = Character.toString(sModes.charAt(0));
187
-        }
188
-        return sModes;
127
+        return modes.isEmpty() ? "" : getAllModesPrefix().substring(0, 1);
189 128
     }
190 129
 
191 130
     /**
192
-     * Get the String Value of ChannelClientInfo (ie @Nickname).
131
+     * Get the String Value of ChannelClientInfo (e.g. @Nickname).
193 132
      *
194
-     * @return String Value of user (inc prefix) (ie @Nickname)
133
+     * @return String Value of user (inc prefix) (e.g. @Nickname)
195 134
      */
196 135
     @Override
197 136
     public String toString() {
198
-        return this.getImportantModePrefix() + this.getNickname();
137
+        return getImportantModePrefix() + getNickname();
199 138
     }
200 139
 
201 140
     @Override
202 141
     public void kick(final String message) {
203
-        myParser.sendString("KICK " + myChannel + " " + this.getNickname(), message);
142
+        parser.sendString("KICK " + myChannel + ' ' + getNickname(), message);
204 143
     }
205 144
 
206 145
     /**
@@ -209,16 +148,38 @@ public class IRCChannelClientInfo implements ChannelClientInfo {
209 148
      * @return String Value of user (inc prefix) (ie @+Nickname)
210 149
      */
211 150
     public String toFullString() {
212
-        return this.getChanModeStr(true) + this.getNickname();
151
+        return getAllModesPrefix() + getNickname();
213 152
     }
214 153
 
215 154
     @Override
216 155
     public int compareTo(final ChannelClientInfo arg0) {
217
-        if (arg0 instanceof IRCChannelClientInfo) {
218
-            final IRCChannelClientInfo other = (IRCChannelClientInfo) arg0;
219
-            return (int) (getImportantModeValue() - other.getImportantModeValue());
220
-        }
156
+        return modeManager.compareImportantModes(getAllModes(), arg0.getAllModes());
157
+    }
158
+
159
+    /**
160
+     * Determines if this client is opped or not.
161
+     *
162
+     * @return True if the client is opped, false otherwise.
163
+     */
164
+    public boolean isOpped() {
165
+        return modeManager.isOpped(getAllModes());
166
+    }
167
+
168
+    /**
169
+     * Adds the specified mode to this client model.
170
+     *
171
+     * @param mode The mode to be added.
172
+     */
173
+    public void addMode(final char mode) {
174
+        modes = modeManager.insertMode(modes, mode);
175
+    }
221 176
 
222
-        return 0;
177
+    /**
178
+     * Removes the specified mode from this client model.
179
+     *
180
+     * @param mode The mode to be removed.
181
+     */
182
+    public void removeMode(final char mode) {
183
+        modes = modes.replace(Character.toString(mode), "");
223 184
     }
224 185
 }

+ 2
- 7
src/com/dmdirc/parser/irc/IRCChannelInfo.java 查看文件

@@ -112,7 +112,7 @@ public class IRCChannelInfo implements ChannelInfo {
112 112
         final long now = System.currentTimeMillis();
113 113
         // Incase of breakage, if getListModeQueue() was last called greater than
114 114
         // 60 seconds ago, we reset the list.
115
-        if (now - (30 * 1000) > listModeQueueTime) {
115
+        if (now - 30 * 1000 > listModeQueueTime) {
116 116
             result = new LinkedList<>();
117 117
             parser.callDebugInfo(IRCParser.DEBUG_LMQ, "Resetting LMQ");
118 118
         }
@@ -136,12 +136,7 @@ public class IRCChannelInfo implements ChannelInfo {
136 136
 
137 137
         final ServerType serverType = parser.getServerType();
138 138
 
139
-        // We are considered opped if we have a mode higher than voice (or if we have any modes if voice doesn't exist)
140
-        long voiceValue = 0;
141
-        if (parser.prefixModes.isPrefixMode('v')) {
142
-            voiceValue = parser.prefixModes.getValueOf('v');
143
-        }
144
-        final boolean isOpped = me.getImportantModeValue() > voiceValue;
139
+        final boolean isOpped = me.isOpped();
145 140
 
146 141
         int modecount = 1;
147 142
 

+ 71
- 7
src/com/dmdirc/parser/irc/PrefixModeManager.java 查看文件

@@ -80,6 +80,21 @@ public class PrefixModeManager {
80 80
         return prefixMap.get(mode);
81 81
     }
82 82
 
83
+    /**
84
+     * Converts a string containing prefix modes into a string containing the corresponding
85
+     * prefixes (e.g. 'ov' becomes '@+').
86
+     *
87
+     * @param modes The modes to retrieve prefixes for.
88
+     * @return The prefixes corresponding to the modes.
89
+     */
90
+    public String getPrefixesFor(final String modes) {
91
+        final StringBuilder builder = new StringBuilder(modes.length());
92
+        for (char mode : modes.toCharArray()) {
93
+            builder.append(getPrefixFor(mode));
94
+        }
95
+        return builder.toString();
96
+    }
97
+
83 98
     /**
84 99
      * Returns the mode corresponding to the specified prefix (e.g. 'o' given '@').
85 100
      *
@@ -121,19 +136,68 @@ public class PrefixModeManager {
121 136
      * @deprecated These values are an implementation detail, and shouldn't be exposed.
122 137
      */
123 138
     @Deprecated
124
-    public long getValueOf(final char mode) {
139
+    private long getValueOf(final char mode) {
125 140
         return prefixModes.get(mode);
126 141
     }
127 142
 
128 143
     /**
129
-     * Gets the numerical value that will be assigned to the next mode.
144
+     * Compares the most important mode of the given mode lists.
130 145
      *
131
-     * @return The next numerical value.
132
-     * @deprecated These values are an implementation detail, and shouldn't be exposed.
146
+     * @param modes1 The first set of modes to compare. Must be ordered by importance.
147
+     * @param modes2 The second set of modes to compare. Must be ordered by importance.
148
+     * @return A negative number of modes2 is more important than modes1; a positive number if
149
+     * modes1 is more important than modes2; zero if the two are equivalent.
133 150
      */
134
-    @Deprecated
135
-    public long getNextValue() {
136
-        return nextKeyPrefix;
151
+    public int compareImportantModes(final String modes1, final String modes2) {
152
+        final char mode1 = modes1.isEmpty() ? ' ' : modes1.charAt(0);
153
+        final char mode2 = modes2.isEmpty() ? ' ' : modes2.charAt(0);
154
+        final long modeValue1 = isPrefixMode(mode1) ? getValueOf(mode1) : 0;
155
+        final long modeValue2 = isPrefixMode(mode2) ? getValueOf(mode2) : 0;
156
+        return (int) (modeValue1 - modeValue2);
157
+    }
158
+
159
+    /**
160
+     * Determines if the specified mode string indicates a user is opped. An opped user is
161
+     * considered one who has any mode greater than 'v' (voice), or if voice doesn't exist then
162
+     * any mode at all.
163
+     *
164
+     * @param modes The modes to test
165
+     * @return True if the modes indicate the client is "opped", false otherwise.
166
+     */
167
+    public boolean isOpped(final String modes) {
168
+        if (modes.isEmpty()) {
169
+            return false;
170
+        }
171
+
172
+        final long voiceValue = isPrefixMode('v') ? prefixModes.get('v') : 0;
173
+        return getValueOf(modes.charAt(0)) > voiceValue;
137 174
     }
138 175
 
176
+    /**
177
+     * Inserts the specified mode into the correct place in the mode string, maintaining importance
178
+     * order.
179
+     *
180
+     * @param modes The existing modes to add the new one to.
181
+     * @param mode The new mode to be added.
182
+     * @return A mode string containing all the modes.
183
+     */
184
+    public String insertMode(final String modes, final char mode) {
185
+        if (modes.indexOf(mode) > -1) {
186
+            // Don't duplicate an existing mode
187
+            return modes;
188
+        }
189
+
190
+        final StringBuilder result = new StringBuilder(modes.length() + 1);
191
+        boolean found = false;
192
+        final long value = getValueOf(mode);
193
+        for (char existingMode : modes.toCharArray()) {
194
+            if (getValueOf(existingMode) < value && !found) {
195
+                // Our new mode is more important, insert it first.
196
+                result.append(mode);
197
+                found = true;
198
+            }
199
+            result.append(existingMode);
200
+        }
201
+        return result.toString();
202
+    }
139 203
 }

+ 6
- 6
src/com/dmdirc/parser/irc/processors/ProcessMode.java 查看文件

@@ -173,8 +173,8 @@ public class ProcessMode extends IRCProcessor {
173 173
                         return;
174 174
                     }
175 175
                     sModeParam = sModestr[nParam++];
176
-                    nValue = parser.prefixModes.getValueOf(cMode);
177
-                    callDebugInfo(IRCParser.DEBUG_INFO, "User Mode: %c / %d [%s] {Positive: %b}", cMode, nValue, sModeParam, bPositive);
176
+                    callDebugInfo(IRCParser.DEBUG_INFO, "User Mode: %c / %s {Positive: %b}",
177
+                            cMode, sModeParam, bPositive);
178 178
                     iChannelClientInfo = iChannel.getChannelClient(sModeParam);
179 179
                     if (iChannelClientInfo == null) {
180 180
                         // Client not known?
@@ -182,13 +182,13 @@ public class ProcessMode extends IRCProcessor {
182 182
                                 " Ignoring (%s)", sModeParam);
183 183
                         continue;
184 184
                     }
185
-                    callDebugInfo(IRCParser.DEBUG_INFO, "\tOld Mode Value: %d", iChannelClientInfo.getChanMode());
185
+                    callDebugInfo(IRCParser.DEBUG_INFO, "\tOld Mode Value: %s",
186
+                            iChannelClientInfo.getAllModes());
186 187
                     if (bPositive) {
187
-                        iChannelClientInfo.setChanMode(iChannelClientInfo.getChanMode() | nValue);
188
+                        iChannelClientInfo.addMode(cMode);
188 189
                         sTemp = "+";
189 190
                     } else {
190
-                        iChannelClientInfo.setChanMode(iChannelClientInfo.getChanMode() ^
191
-                                iChannelClientInfo.getChanMode() & nValue);
191
+                        iChannelClientInfo.removeMode(cMode);
192 192
                         sTemp = "-";
193 193
                     }
194 194
                     sTemp += cMode;

+ 13
- 24
src/com/dmdirc/parser/irc/processors/ProcessNames.java 查看文件

@@ -76,9 +76,6 @@ public class ProcessNames extends IRCProcessor {
76 76
         } else {
77 77
             // Names
78 78
 
79
-            IRCClientInfo iClient;
80
-            IRCChannelClientInfo iChannelClient;
81
-
82 79
             iChannel = getChannel(token[4]);
83 80
 
84 81
             if (iChannel == null) {
@@ -92,45 +89,37 @@ public class ProcessNames extends IRCProcessor {
92 89
             iChannel.setAddingNames(true);
93 90
 
94 91
             final String[] sNames = token[token.length - 1].split(" ");
95
-            String sNameBit, sName = "";
92
+            String sName = "";
96 93
             StringBuilder sModes = new StringBuilder();
97
-            long nPrefix = 0;
98 94
             for (String sName1 : sNames) {
99
-                sNameBit = sName1;
100 95
                 // If name is empty (ie there was an extra space) ignore it.
101
-                if (sNameBit.isEmpty()) {
96
+                if (sName1.isEmpty()) {
102 97
                     continue;
103 98
                 }
104 99
                 // This next bit of code allows for any ircd which decides to use @+Foo in names
105
-                for (int i = 0; i < sNameBit.length(); ++i) {
106
-                    final Character cMode = sNameBit.charAt(i);
107
-                    // hPrefixMap contains @, o, +, v this caused issue 107
108
-                    // hPrefixModes only contains o, v so if the mode is in hPrefixMap
109
-                    // and not in hPrefixModes, its ok to use.
100
+                for (int i = 0; i < sName1.length(); i++) {
101
+                    final char cMode = sName1.charAt(i);
110 102
                     if (parser.prefixModes.isPrefix(cMode)) {
111
-                        sModes.append(cMode);
112
-                        nPrefix +=
113
-                                parser.prefixModes.getValueOf(parser.prefixModes.getModeFor(cMode));
103
+                        sModes.append(parser.prefixModes.getModeFor(cMode));
114 104
                     } else {
115
-                        sName = sNameBit.substring(i);
105
+                        sName = sName1.substring(i);
116 106
                         break;
117 107
                     }
118 108
                 }
119
-                callDebugInfo(IRCParser.DEBUG_INFO, "Name: %s Modes: \"%s\" [%d]", sName,
120
-                        sModes.toString(), nPrefix);
109
+                callDebugInfo(IRCParser.DEBUG_INFO, "Name: %s Modes: \"%s\"", sName,
110
+                        sModes.toString());
121 111
 
122
-                iClient = getClientInfo(sName);
112
+                IRCClientInfo iClient = getClientInfo(sName);
123 113
                 if (iClient == null) {
124 114
                     iClient = new IRCClientInfo(parser, sName);
125 115
                     parser.addClient(iClient);
126 116
                 }
127 117
                 iClient.setUserBits(sName, false); // Will do nothing if this isn't UHNAMES
128
-                iChannelClient = iChannel.addClient(iClient);
129
-                iChannelClient.setChanMode(nPrefix);
118
+                final IRCChannelClientInfo iChannelClient = iChannel.addClient(iClient);
119
+                iChannelClient.setChanMode(sModes.toString());
130 120
 
131 121
                 sName = "";
132 122
                 sModes = new StringBuilder();
133
-                nPrefix = 0;
134 123
             }
135 124
         }
136 125
     }
@@ -138,7 +127,7 @@ public class ProcessNames extends IRCProcessor {
138 127
     /**
139 128
      * Callback to all objects implementing the ChannelTopic Callback.
140 129
      *
141
-     * @see com.dmdirc.parser.interfaces.callbacks.ChannelTopicListener
130
+     * @see ChannelTopicListener
142 131
      * @param cChannel Channel that topic was set on
143 132
      * @param bIsJoinTopic True when getting topic on join, false if set by user/server
144 133
      * @return true if a method was called, false otherwise
@@ -151,7 +140,7 @@ public class ProcessNames extends IRCProcessor {
151 140
     /**
152 141
      * Callback to all objects implementing the ChannelGotNames Callback.
153 142
      *
154
-     * @see com.dmdirc.parser.interfaces.callbacks.ChannelNamesListener
143
+     * @see ChannelNamesListener
155 144
      * @param cChannel Channel which the names reply is for
156 145
      * @return true if a method was called, false otherwise
157 146
      */

+ 0
- 3
test/com/dmdirc/parser/irc/ChannelClientInfoTest.java 查看文件

@@ -46,21 +46,18 @@ public class ChannelClientInfoTest {
46 46
         assertEquals("+", cci.getImportantModePrefix());
47 47
         assertEquals("+luser", cci.toString());
48 48
         assertEquals("+luser", cci.toFullString());
49
-        final long value = cci.getImportantModeValue();
50 49
 
51 50
         parser.injectLine(":server MODE #DMDirc_testing +o luser");
52 51
         assertEquals("o", cci.getImportantMode());
53 52
         assertEquals("@", cci.getImportantModePrefix());
54 53
         assertEquals("@luser", cci.toString());
55 54
         assertEquals("@+luser", cci.toFullString());
56
-        assertTrue(cci.getImportantModeValue() > value);
57 55
 
58 56
         parser.injectLine(":server MODE #DMDirc_testing -ov luser luser");
59 57
         assertEquals("", cci.getImportantMode());
60 58
         assertEquals("", cci.getImportantModePrefix());
61 59
         assertEquals("luser", cci.toString());
62 60
         assertEquals("luser", cci.toFullString());
63
-        assertEquals(0L, cci.getImportantModeValue());
64 61
     }
65 62
     
66 63
     @Test

+ 7
- 6
test/com/dmdirc/parser/irc/ProcessModeTest.java 查看文件

@@ -69,18 +69,19 @@ public class ProcessModeTest {
69 69
         final IRCChannelClientInfo cci = parser.getClient("luser").getChannelClients().get(0);
70 70
 
71 71
         parser.injectLine(":server MODE #DMDirc_testing +v luser");
72
-        assertEquals("+", cci.getChanModeStr(true));
72
+        assertEquals("v", cci.getAllModes());
73
+        assertEquals("+", cci.getAllModesPrefix());
73 74
 
74 75
         parser.injectLine(":server MODE #DMDirc_testing +o luser");
75
-        assertEquals("ov", cci.getChanModeStr(false));
76
-        assertEquals("@+", cci.getChanModeStr(true));
76
+        assertEquals("ov", cci.getAllModes());
77
+        assertEquals("@+", cci.getAllModesPrefix());
77 78
 
78 79
         parser.injectLine(":server MODE #DMDirc_testing +bov moo luser luser");
79
-        assertEquals("ov", cci.getChanModeStr(false));
80
+        assertEquals("ov", cci.getAllModes());
80 81
 
81 82
         parser.injectLine(":server MODE #DMDirc_testing -bov moo luser luser");
82
-        assertEquals("", cci.getChanModeStr(false));
83
-        assertEquals("", cci.getChanModeStr(true));
83
+        assertEquals("", cci.getAllModes());
84
+        assertEquals("", cci.getAllModesPrefix());
84 85
     }
85 86
     
86 87
     @Test

+ 3
- 3
test/com/dmdirc/parser/irc/ProcessNamesTest.java 查看文件

@@ -64,15 +64,15 @@ public class ProcessNamesTest {
64 64
 
65 65
         IRCChannelClientInfo cci = parser.getClient("luser").getChannelClients().get(0);
66 66
         assertEquals(parser.getChannel("#DMDirc_testing"), cci.getChannel());
67
-        assertEquals("+", cci.getChanModeStr(true));
67
+        assertEquals("+", cci.getAllModesPrefix());
68 68
         
69 69
         cci = parser.getChannel("#DMDirc_testing").getChannelClient("nick2");
70 70
         assertNotNull(cci);
71
-        assertEquals("@+", cci.getChanModeStr(true));
71
+        assertEquals("@+", cci.getAllModesPrefix());
72 72
 
73 73
         cci = parser.getChannel("#DMDirc_testing").getChannelClient("nick3");
74 74
         assertNotNull(cci);
75
-        assertEquals("", cci.getChanModeStr(true));
75
+        assertEquals("", cci.getAllModesPrefix());
76 76
     }
77 77
 
78 78
 }

+ 2
- 2
test/com/dmdirc/parser/irc/ProcessNickTest.java 查看文件

@@ -55,7 +55,7 @@ public class ProcessNickTest {
55 55
 
56 56
         final IRCChannelClientInfo cci = parser.getClient("LUSER").getChannelClients().get(0);
57 57
         assertEquals(parser.getChannel("#DMDirc_testing"), cci.getChannel());
58
-        assertEquals("+", cci.getChanModeStr(true));
58
+        assertEquals("+", cci.getAllModesPrefix());
59 59
 
60 60
         verify(tinc).onNickChanged(same(parser), (Date) anyObject(),
61 61
                 same(parser.getClient("LUSER")), eq("luser"));
@@ -77,7 +77,7 @@ public class ProcessNickTest {
77 77
 
78 78
         final IRCChannelClientInfo cci = parser.getClient("foobar").getChannelClients().get(0);
79 79
         assertEquals(parser.getChannel("#DMDirc_testing"), cci.getChannel());
80
-        assertEquals("+", cci.getChanModeStr(true));
80
+        assertEquals("+", cci.getAllModesPrefix());
81 81
     }    
82 82
     
83 83
     @Test

Loading…
取消
儲存