Diffstat (limited to 'noncore/net/opieirc/ircmessageparser.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index 6b88f34..400ff41 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp @@ -208,4 +208,5 @@ void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { void IRCMessageParser::parseLiteralNick(IRCMessage *message) { + IRCPerson mask(message->prefix()); - + /* this way of handling nick changes really sucks */ if (mask.nick() == m_session->m_server->nick()) { @@ -220,5 +221,18 @@ void IRCMessageParser::parseLiteralNick(IRCMessage *message) { if (person) { - IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0 ))); - output.addParam(person); - emit outputReady(output); + //IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0))); + + /* new code starts here -- this removes the person from all channels */ + QList<IRCChannel> channels; + m_session->getChannelsByPerson(person, channels); + QListIterator<IRCChannel> it(channels); + for (;it.current(); ++it) { + IRCChannelPerson *chanperson = it.current()->getPerson(mask.nick()); + it.current()->removePerson(chanperson); + chanperson->person->setNick(message->param(0)); + it.current()->addPerson(chanperson); + IRCOutput output(OUTPUT_NICKCHANGE, tr("%1 is now known as %2").arg( mask.nick() ).arg( message->param(0))); + output.addParam(person); + emit outputReady(output); + } + /* new code ends here */ } else { @@ -399,2 +413,3 @@ void IRCMessageParser::parseLiteralKick(IRCMessage *message) { } else { + /* someone else got kicked */ channel->removePerson(person); |