From: Manuel Nickschas Date: Thu, 30 Sep 2010 07:37:33 +0000 (+0200) Subject: Port IrcServerHandler::defaultHandler() to the event backend X-Git-Tag: 0.8-beta1~106 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=7c45e37945b0fa3baa5e8190991c9a2e24d357ba;ds=sidebyside Port IrcServerHandler::defaultHandler() to the event backend The killing has begun. --- diff --git a/src/core/coresessioneventprocessor.cpp b/src/core/coresessioneventprocessor.cpp index b4a90877..ebfb007a 100644 --- a/src/core/coresessioneventprocessor.cpp +++ b/src/core/coresessioneventprocessor.cpp @@ -20,7 +20,9 @@ #include "coresessioneventprocessor.h" +#include "corenetwork.h" #include "coresession.h" +#include "ircevent.h" CoreSessionEventProcessor::CoreSessionEventProcessor(CoreSession *session) : QObject(session), @@ -28,3 +30,16 @@ CoreSessionEventProcessor::CoreSessionEventProcessor(CoreSession *session) { } + +void CoreSessionEventProcessor::processIrcEventNumeric(IrcEventNumeric *e) { + switch(e->number()) { + + // CAP stuff + case 903: case 904: case 905: case 906: case 907: + qobject_cast(e->network())->putRawLine("CAP END"); + break; + + default: + break; + } +} diff --git a/src/core/coresessioneventprocessor.h b/src/core/coresessioneventprocessor.h index 7ed9fe46..fa647d0a 100644 --- a/src/core/coresessioneventprocessor.h +++ b/src/core/coresessioneventprocessor.h @@ -24,7 +24,7 @@ #include class CoreSession; -class Event; +class IrcEventNumeric; class CoreSessionEventProcessor : public QObject { Q_OBJECT @@ -34,6 +34,8 @@ public: inline CoreSession *coreSession() const { return _coreSession; } + Q_INVOKABLE void processIrcEventNumeric(IrcEventNumeric *event); + protected: private: diff --git a/src/core/eventstringifier.cpp b/src/core/eventstringifier.cpp index 35386e29..8ac39119 100644 --- a/src/core/eventstringifier.cpp +++ b/src/core/eventstringifier.cpp @@ -45,3 +45,67 @@ MessageEvent *EventStringifier::createMessageEvent(NetworkEvent *event, Message: void EventStringifier::sendMessageEvent(MessageEvent *event) { qDebug() << event->text(); coreSession()->eventManager()->sendEvent(event); } + +void EventStringifier::processIrcEventNumeric(IrcEventNumeric *e) { + //qDebug() << e->number(); + switch(e->number()) { + // Welcome, status, info messages. Just display these. + case 2: case 3: case 4: case 5: case 251: case 252: case 253: case 254: case 255: case 372: case 375: + displayMsg(e, Message::Server, e->params().join(" "), e->prefix()); + break; + + // Server error messages without param, just display them + case 409: case 411: case 412: case 422: case 424: case 445: case 446: case 451: case 462: + case 463: case 464: case 465: case 466: case 472: case 481: case 483: case 485: case 491: case 501: case 502: + case 431: // ERR_NONICKNAMEGIVEN + displayMsg(e, Message::Error, e->params().join(" "), e->prefix()); + break; + + // Server error messages, display them in red. First param will be appended. + case 401: { + QString target = e->params().takeFirst(); + displayMsg(e, Message::Error, e->params().join(" ") + " " + target, e->prefix(), target, Message::Redirected); + break; + } + + case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442: { + QString channelName = e->params().takeFirst(); + displayMsg(e, Message::Error, e->params().join(" ") + " " + channelName, e->prefix()); + break; + } + + // Server error messages which will be displayed with a colon between the first param and the rest + case 413: case 414: case 423: case 441: case 444: case 461: // FIXME see below for the 47x codes + case 467: case 471: case 473: case 474: case 475: case 476: case 477: case 478: case 482: + case 436: // ERR_NICKCOLLISION + { + QString p = e->params().takeFirst(); + displayMsg(e, Message::Error, p + ": " + e->params().join(" ")); + break; + } + + // Ignore these commands. + case 321: case 366: case 376: + break; + + // CAP stuff + case 903: case 904: case 905: case 906: case 907: + { + displayMsg(e, Message::Info, "CAP: " + e->params().join("")); + break; + } + + // Everything else will be marked in red, so we can add them somewhere. + default: + if(_whois) { + // many nets define their own WHOIS fields. we fetch those not in need of special attention here: + displayMsg(e, Message::Server, "[Whois] " + e->params().join(" "), e->prefix()); + } else { + // FIXME figure out how/where to do this in the future + //if(coreSession()->ircListHelper()->requestInProgress(network()->networkId())) + // coreSession()->ircListHelper()->reportError(params.join(" ")); + //else + displayMsg(e, Message::Error, QString("%1 %2").arg(e->number(), 3, 10, QLatin1Char('0')).arg(e->params().join(" ")), e->prefix()); + } + } +} diff --git a/src/core/eventstringifier.h b/src/core/eventstringifier.h index 070242b0..2e1074a2 100644 --- a/src/core/eventstringifier.h +++ b/src/core/eventstringifier.h @@ -47,6 +47,9 @@ public: const QString &target = QString(), Message::Flags msgFlags = Message::None); + //! Handle generic numeric events + Q_INVOKABLE void processIrcEventNumeric(IrcEventNumeric *event); + public slots: //! Creates and sends a MessageEvent void displayMsg(NetworkEvent *event, diff --git a/src/core/ircparser.cpp b/src/core/ircparser.cpp index dc9c227c..75ac2c99 100644 --- a/src/core/ircparser.cpp +++ b/src/core/ircparser.cpp @@ -175,6 +175,7 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) { msg = decrypt(net, target, msg); events << new IrcEventRawMessage(EventManager::IrcEventRawPrivmsg, net, prefix, target, msg); + //events << new MessageEvent(Message::Plain, net, net->channelDecode(target, msg), target, prefix); } } break; diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 7004e864..12c41b6e 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -132,63 +132,8 @@ void IrcServerHandler::defaultHandler(QString cmd, const QString &prefix, const // we assume that all this happens in server encoding QStringList params = serverDecode(rawparams); uint num = cmd.toUInt(); - if(num) { - // A lot of server messages don't really need their own handler because they don't do much. - // Catch and handle these here. - switch(num) { - // Welcome, status, info messages. Just display these. - case 2: case 3: case 4: case 5: case 251: case 252: case 253: case 254: case 255: case 372: case 375: - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", params.join(" "), prefix); - break; - // Server error messages without param, just display them - case 409: case 411: case 412: case 422: case 424: case 445: case 446: case 451: case 462: - case 463: case 464: case 465: case 466: case 472: case 481: case 483: case 485: case 491: case 501: case 502: - case 431: // ERR_NONICKNAMEGIVEN - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", params.join(" "), prefix); - break; - // Server error messages, display them in red. First param will be appended. - case 401: { - QString target = params.takeFirst(); - emit displayMsg(Message::Error, target, params.join(" ") + " " + target, prefix, Message::Redirected); - break; - } - case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442: { - QString channelName = params.takeFirst(); - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", params.join(" ") + " " + channelName, prefix); - break; - } - // Server error messages which will be displayed with a colon between the first param and the rest - case 413: case 414: case 423: case 441: case 444: case 461: // FIXME see below for the 47x codes - case 467: case 471: case 473: case 474: case 475: case 476: case 477: case 478: case 482: - case 436: // ERR_NICKCOLLISION - { - QString p = params.takeFirst(); - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", p + ": " + params.join(" ")); - break; - } - // Ignore these commands. - case 321: case 366: case 376: - break; - - case 903: case 904: case 905: case 906: case 907: - { - network()->putRawLine("CAP END"); - emit displayMsg(Message::Info, BufferInfo::StatusBuffer, "", "CAP: " + params.join("")); - } - // Everything else will be marked in red, so we can add them somewhere. - default: - if(_whois) { - // many nets define their own WHOIS fields. we fetch those not in need of special attention here: - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", "[Whois] " + params.join(" "), prefix); - } else { - if(coreSession()->ircListHelper()->requestInProgress(network()->networkId())) - coreSession()->ircListHelper()->reportError(params.join(" ")); - else - emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", cmd + " " + params.join(" "), prefix); - } - } - //qDebug() << prefix <<":"< QString nick = serverDecode(params[0]); IrcUser *ircuser = network()->ircUser(nick); - + QDateTime now = QDateTime::currentDateTime(); int idleSecs = serverDecode(params[1]).toInt(); idleSecs *= -1; - + if(ircuser) { ircuser->setIdleTime(now.addSecs(idleSecs)); if(params.size() > 3) { // if we have more then 3 params we have the above mentioned "real life" situation @@ -1075,7 +1020,7 @@ void IrcServerHandler::handle341(const QString &prefix, const QList qWarning() << "IrcServerHandler::handle341(): unknown channel:" << params[1]; return; } - + emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel->name(), tr("%1 has been invited to %2").arg(nick).arg(channel->name())); }