summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieirc/ircmessageparser.cpp35
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
@@ -584,50 +584,65 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) {
if (channel != 0) {
QString people = message->param(3);
QTextIStream stream(&people);
QString temp;
while (!stream.atEnd()) {
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) {
channel->setHasPeople(TRUE);
/* Yes, we want the names before anything happens inside the GUI */
IRCOutput output(OUTPUT_SELFJOIN, tr("You joined channel ") + channel->channelname());
output.addParam(channel);
emit outputReady(output);
} else {