From: Alexander von Renteln Date: Fri, 1 Feb 2008 19:38:23 +0000 (+0000) Subject: added ctcp handler to userinputhandler X-Git-Tag: 0.2.0-alpha1~150 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=ba1cff451371eda2cb27a4cc7de2196e68fcc8f7 added ctcp handler to userinputhandler enabled ctcp ping and version in user context menu updated version.inc for the first time ;-) --- diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index e6e3b324..438404c6 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -400,7 +400,6 @@ WHO-Message: WHOWAS-Message: Replies 314 and 369 are responses to a WHOWAS message. - ??? BitlBee program, simulating IRC server with one channel, 374-378 */ @@ -408,8 +407,10 @@ WHOWAS-Message: void IrcServerHandler::handle301(QString prefix, QList params) { Q_UNUSED(prefix) IrcUser *ircuser = network()->ircUser(serverDecode(params[0])); - ircuser->setAwayMessage(serverDecode(params.last())); - ircuser->setAway(true); + if(ircuser) { + ircuser->setAwayMessage(serverDecode(params.last())); + ircuser->setAway(true); + } emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } @@ -417,18 +418,22 @@ void IrcServerHandler::handle301(QString prefix, QList params) { void IrcServerHandler::handle311(QString prefix, QList params) { Q_UNUSED(prefix) IrcUser *ircuser = network()->ircUser(serverDecode(params[0])); - ircuser->setUser(serverDecode(params[1])); - ircuser->setHost(serverDecode(params[2])); - ircuser->setRealName(serverDecode(params.last())); - emit displayMsg(Message::Server, "", tr("[Whois] %1 %2 %3 (%4)") - .arg(ircuser->nick(), ircuser->user(), ircuser->host(), ircuser->realName())); + if(ircuser) { + ircuser->setUser(serverDecode(params[1])); + ircuser->setHost(serverDecode(params[2])); + ircuser->setRealName(serverDecode(params.last())); + } + emit displayMsg(Message::Server, "", tr("[Whois] %1") + .arg(serverDecode(params).join(" "))); } /* RPL_WHOISSERVER - " :" */ void IrcServerHandler::handle312(QString prefix, QList params) { Q_UNUSED(prefix) IrcUser *ircuser = network()->ircUser(serverDecode(params[0])); - ircuser->setServer(serverDecode(params[1])); + if(ircuser) { + ircuser->setServer(serverDecode(params[1])); + } if(_whowas) { emit displayMsg(Message::Server, "", tr("[Whowas] %1").arg(serverDecode(params).join(" "))); } else { @@ -440,7 +445,9 @@ void IrcServerHandler::handle312(QString prefix, QList params) { void IrcServerHandler::handle313(QString prefix, QList params) { Q_UNUSED(prefix) IrcUser *ircuser = network()->ircUser(serverDecode(params[0])); - ircuser->setIrcOperator(params.last()); + if(ircuser) { + ircuser->setIrcOperator(params.last()); + } emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); } @@ -461,11 +468,15 @@ void IrcServerHandler::handle315(QString prefix, QList params) { void IrcServerHandler::handle317(QString prefix, QList params) { Q_UNUSED(prefix) IrcUser *ircuser = network()->ircUser(serverDecode(params[0])); - QDateTime now = QDateTime::currentDateTime(); - int idleSecs = serverDecode(params[1]).toInt(); - idleSecs *= -1; - ircuser->setIdleTime(now.addSecs(idleSecs)); - emit displayMsg(Message::Server, "", tr("[Whois] %1 %2").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); + if(ircuser) { + QDateTime now = QDateTime::currentDateTime(); + int idleSecs = serverDecode(params[1]).toInt(); + idleSecs *= -1; + ircuser->setIdleTime(now.addSecs(idleSecs)); + emit displayMsg(Message::Server, "", tr("[Whois] %1 %2").arg(ircuser->nick()).arg(ircuser->idleTime().secsTo(now))); + } else { + emit displayMsg(Message::Server, "", tr("[Whois] %1").arg(serverDecode(params).join(" "))); + } } /* RPL_ENDOFWHOIS - " :End of WHOIS list" */ diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index 2ecb58dd..9007b0f4 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -66,6 +66,24 @@ void UserInputHandler::handleBan(QString bufname, QString msg) { emit putCmd("MODE", banMsg); } +void UserInputHandler::handleCtcp(QString bufname, QString msg) { + QStringList params = msg.split(" ", QString::SkipEmptyParts); + if (params.size() != 2) { + // qDebug() << "Ctcp-Request-Error: not exactly two parameters ->" << msg; + return; + } + params[1] = params[1].toUpper(); + QString verboseMessage = tr("sending CTCP-%1-request").arg(params[1]); + if(params[1] == "PING") { + uint now = QDateTime::currentDateTime().toTime_t(); + params.append(QString::number(now)); + } else { + params.append(""); + } + server->ctcpHandler()->query(params[0], params[1], params[2]); + emit displayMsg(Message::Action, "", verboseMessage, network()->myNick()); +} + void UserInputHandler::handleDeop(QString bufname, QString msg) { QStringList nicks = msg.split(' ', QString::SkipEmptyParts); QString m = "-"; for(int i = 0; i < nicks.count(); i++) m += 'o'; diff --git a/src/core/userinputhandler.h b/src/core/userinputhandler.h index fa0560d4..1ead7c5c 100644 --- a/src/core/userinputhandler.h +++ b/src/core/userinputhandler.h @@ -36,6 +36,7 @@ public: public slots: void handleAway(QString, QString); void handleBan(QString, QString); + void handleCtcp(QString, QString); void handleDeop(QString, QString); void handleDevoice(QString, QString); void handleInvite(QString, QString); diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index c1f0ab8b..99ba8ded 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -76,9 +76,7 @@ void NickView::showContextMenu(const QPoint & pos ) { QAction *whoisAction = nickContextMenu.addAction(tr("WHOIS")); QAction *versionAction = nickContextMenu.addAction(tr("VERSION")); - versionAction->setEnabled(false); QAction *pingAction = nickContextMenu.addAction(tr("PING")); - pingAction->setEnabled(false); nickContextMenu.addSeparator(); @@ -105,9 +103,9 @@ void NickView::showContextMenu(const QPoint & pos ) { QAction *result = nickContextMenu.exec(QCursor::pos()); - if(result == whoisAction) { Client::instance()->userInput(bufferInfo, "/WHOIS " + username + " " + username); } - else if(result == versionAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " VERSION"); } - else if(result == pingAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " PING"); } + if(result == whoisAction) { Client::instance()->userInput(bufferInfo, QString("/WHOIS %1 %1").arg(username)); } + else if(result == versionAction) { Client::instance()->userInput(bufferInfo, QString("/CTCP %1 VERSION").arg(username)); } + else if(result == pingAction) { Client::instance()->userInput(bufferInfo, QString("/CTCP %1 PING ").arg(username)); } else if(result == opAction) { Client::instance()->userInput(bufferInfo, "/OP " + username); } else if(result == deOpAction) { Client::instance()->userInput(bufferInfo, "/DEOP " + username); } diff --git a/version.inc b/version.inc index 67acc5e0..52a03980 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-01"; - quasselBuild = 428; + quasselBuild = 430; //! Minimum client build number the core needs clientBuildNeeded = 428;