X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircparser.cpp;h=dec7b788ed66a994b536acddae468169a4a63b8c;hp=88c6b3cb2340a9d9589262ab225049f43033ec09;hb=4259bc3c5b11164245535e011a69efa6937bb6a6;hpb=6df87033d69892ce1a12c5242b8d217087d6ddc8 diff --git a/src/core/ircparser.cpp b/src/core/ircparser.cpp index 88c6b3cb..dec7b788 100644 --- a/src/core/ircparser.cpp +++ b/src/core/ircparser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2013 by the Quassel Project * + * Copyright (C) 2005-2015 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -180,12 +180,13 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) if (checkParamCount(cmd, params, 1)) { QString senderNick = nickFromMask(prefix); + net->updateNickFromMask(prefix); QByteArray msg = params.count() < 2 ? QByteArray() : params.at(1); QStringList targets = net->serverDecode(params.at(0)).split(',', QString::SkipEmptyParts); QStringList::const_iterator targetIter; for (targetIter = targets.constBegin(); targetIter != targets.constEnd(); ++targetIter) { - QString target = net->isChannelName(*targetIter) ? *targetIter : senderNick; + QString target = net->isChannelName(*targetIter) || net->isStatusMsg(*targetIter) ? *targetIter : senderNick; msg = decrypt(net, target, msg); @@ -226,8 +227,10 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) else { if (!target.isEmpty() && net->prefixes().contains(target.at(0))) target = target.mid(1); - if (!net->isChannelName(target)) + if (!net->isChannelName(target)) { target = nickFromMask(prefix); + net->updateNickFromMask(prefix); + } } #ifdef HAVE_QCA2 @@ -256,12 +259,14 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) QString channel = net->serverDecode(params.at(0)); decParams << channel; decParams << net->userDecode(nickFromMask(prefix), params.at(1)); + net->updateNickFromMask(prefix); } break; case EventManager::IrcEventQuit: if (params.count() >= 1) { decParams << net->userDecode(nickFromMask(prefix), params.at(0)); + net->updateNickFromMask(prefix); } break; @@ -273,6 +278,15 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) } break; + case EventManager::IrcEventAway: + { + QString nick = nickFromMask(prefix); + decParams << nick; + decParams << (params.count() >= 1 ? net->userDecode(nick, params.at(0)) : QString()); + net->updateNickFromMask(prefix); + } + break; + case EventManager::IrcEventNumeric: switch (num) { case 301: /* RPL_AWAY */ @@ -298,6 +312,17 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) decParams << net->channelDecode(channel, params.at(2)); } break; + case 451: /* You have not registered... */ + if (target.compare("CAP", Qt::CaseInsensitive) == 0) { + // :irc.server.com 451 CAP :You have not registered + // If server doesn't support capabilities, it will report this message. Turn it + // into a nicer message since it's not a real error. + defaultHandling = false; + events << new MessageEvent(Message::Server, e->network(), + tr("Capability negotiation not supported"), + QString(), QString(), Message::None, e->timestamp()); + } + break; } default: