|
@@ -1569,11 +1569,7 @@ public class IRCParser extends BaseParser implements SecureParser, EncodingParse
|
1569
|
1569
|
|
1570
|
1570
|
@Override
|
1571
|
1571
|
public String getChannelUserModes() {
|
1572
|
|
- if (h005Info.containsKey("PREFIXSTRING")) {
|
1573
|
|
- return h005Info.get("PREFIXSTRING");
|
1574
|
|
- } else {
|
1575
|
|
- return "";
|
1576
|
|
- }
|
|
1572
|
+ return prefixModes.getModes();
|
1577
|
1573
|
}
|
1578
|
1574
|
|
1579
|
1575
|
@Override
|
|
@@ -1690,42 +1686,35 @@ public class IRCParser extends BaseParser implements SecureParser, EncodingParse
|
1690
|
1686
|
*/
|
1691
|
1687
|
public void parsePrefixModes() {
|
1692
|
1688
|
final String sDefaultModes = "(ohv)@%+";
|
1693
|
|
- String[] bits;
|
1694
|
1689
|
String modeStr;
|
1695
|
1690
|
if (h005Info.containsKey("PREFIX")) {
|
1696
|
1691
|
modeStr = h005Info.get("PREFIX");
|
1697
|
1692
|
} else {
|
1698
|
1693
|
modeStr = sDefaultModes;
|
1699
|
1694
|
}
|
1700
|
|
- if (modeStr.substring(0, 1).equals("(")) {
|
|
1695
|
+ if ("(".equals(modeStr.substring(0, 1))) {
|
1701
|
1696
|
modeStr = modeStr.substring(1);
|
1702
|
1697
|
} else {
|
1703
|
1698
|
modeStr = sDefaultModes.substring(1);
|
1704
|
1699
|
h005Info.put("PREFIX", sDefaultModes);
|
1705
|
1700
|
}
|
1706
|
1701
|
|
1707
|
|
- bits = modeStr.split("\\)", 2);
|
1708
|
|
- if (bits.length != 2 || bits[0].length() != bits[1].length()) {
|
1709
|
|
- modeStr = sDefaultModes;
|
1710
|
|
- callErrorInfo(new ParserError(ParserError.ERROR_ERROR, "PREFIX String not valid. Using default string of \"" + modeStr + "\"", getLastLine()));
|
1711
|
|
- h005Info.put("PREFIX", modeStr);
|
1712
|
|
- modeStr = modeStr.substring(1);
|
1713
|
|
- bits = modeStr.split("\\)", 2);
|
|
1702
|
+ int closingIndex = modeStr.indexOf(')');
|
|
1703
|
+ if (closingIndex * 2 + 1 != modeStr.length()) {
|
|
1704
|
+ callErrorInfo(new ParserError(ParserError.ERROR_ERROR,
|
|
1705
|
+ "PREFIX String not valid. Using default string of \"" + modeStr +
|
|
1706
|
+ '"', getLastLine()));
|
|
1707
|
+ h005Info.put("PREFIX", sDefaultModes);
|
|
1708
|
+ modeStr = sDefaultModes.substring(1);
|
|
1709
|
+ closingIndex = modeStr.indexOf(')');
|
1714
|
1710
|
}
|
1715
|
1711
|
|
1716
|
|
- // resetState
|
1717
|
|
- prefixModes.clear();
|
1718
|
|
-
|
1719
|
|
- for (int i = bits[0].length() - 1; i > -1; --i) {
|
1720
|
|
- final Character cMode = bits[0].charAt(i);
|
1721
|
|
- final Character cPrefix = bits[1].charAt(i);
|
1722
|
|
- callDebugInfo(DEBUG_INFO, "Found Prefix Mode: %c => %c", cMode, cPrefix);
|
1723
|
|
- if (!prefixModes.isPrefixMode(cMode)) {
|
1724
|
|
- prefixModes.add(cMode, cPrefix);
|
1725
|
|
- }
|
1726
|
|
- }
|
|
1712
|
+ // The modes passed from the server are in descending order of importance, we want to
|
|
1713
|
+ // store them in ascending, so reverse them:
|
|
1714
|
+ final String reversedModes = new StringBuilder(modeStr).reverse().toString();
|
1727
|
1715
|
|
1728
|
|
- h005Info.put("PREFIXSTRING", bits[0]);
|
|
1716
|
+ prefixModes.setModes(reversedModes.substring(closingIndex + 1),
|
|
1717
|
+ reversedModes.substring(0, closingIndex));
|
1729
|
1718
|
}
|
1730
|
1719
|
|
1731
|
1720
|
@Override
|