-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index 32e1011..c449a65 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp @@ -590,38 +590,53 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { stream >> temp; char flagch = temp.at(0).latin1(); int flag = 0; QString nick; /* Parse person flags */ - if (flagch == '@' || flagch == '+' || flagch=='%' || flagch == '*') { + if (flagch == '~' || flagch == '&' || flagch == '@' || flagch == '+' || + flagch=='%' || flagch == '*') { nick = temp.right(temp.length()-1); switch (flagch) { - case '@': flag = IRCChannelPerson::PERSON_FLAG_OP; break; - case '+': flag = IRCChannelPerson::PERSON_FLAG_VOICE; break; - case '%': flag = IRCChannelPerson::PERSON_FLAG_HALFOP; break; - default : flag = 0; break; + /** + * @note '~' and `&' are extensions of the unrealircd irc + * daemon. This app can't see users w/out checking for these + * chars. + */ + case '~': + case '&': + case '@': + flag = IRCChannelPerson::PERSON_FLAG_OP; + break; + case '+': + flag = IRCChannelPerson::PERSON_FLAG_VOICE; + break; + case '%': + flag = IRCChannelPerson::PERSON_FLAG_HALFOP; + break; + default : + flag = 0; + break; } - } else { + } else nick = temp; - } IRCPerson *person = m_session->getPerson(nick); if (person == 0) { person = new IRCPerson(); person->setNick(nick); m_session->addPerson(person); } IRCChannelPerson *chan_person = new IRCChannelPerson(person); chan_person->setFlags(flag); channel->addPerson(chan_person); } - } else { - emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Server message with unknown channel"))); - } + } else + emit outputReady(IRCOutput(OUTPUT_ERROR, + tr("Server message with unknown channel"))); } void IRCMessageParser::parseNumericalEndOfNames(IRCMessage *message) { /* Done syncing to channel */ IRCChannel *channel = m_session->getChannel(message->param(1).lower()); if (channel) { |