X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.cpp;h=84c6a194796f216d65aeaf6e515d3f1af509986b;hp=534229c043fd3dd7884343c44fe223af88bcccf9;hb=2d7fa70ddeddb4efdd1c2514a855cf9a6eef39bb;hpb=14281719026a2d9d30667f63f3659c2c4e7e0cca diff --git a/src/core/ircserverhandler.cpp b/src/core/ircserverhandler.cpp index 534229c0..84c6a194 100644 --- a/src/core/ircserverhandler.cpp +++ b/src/core/ircserverhandler.cpp @@ -197,6 +197,21 @@ void IrcServerHandler::defaultHandler(QString cmd, const QString &prefix, const //******************************/ // IRC SERVER HANDLER //******************************/ +void IrcServerHandler::handleInvite(const QString &prefix, const QList ¶ms) { + if(!checkParamCount("IrcServerHandler::handleInvite()", params, 2)) + return; +// qDebug() << "IrcServerHandler::handleInvite()" << prefix << params; + + IrcUser *ircuser = network()->updateNickFromMask(prefix); + if(!ircuser) { + return; + } + + QString channel = serverDecode(params[1]); + + emit displayMsg(Message::Invite, BufferInfo::StatusBuffer, "", tr("%1 invited you to channel %2").arg(ircuser->nick()).arg(channel)); +} + void IrcServerHandler::handleJoin(const QString &prefix, const QList ¶ms) { if(!checkParamCount("IrcServerHandler::handleJoin()", params, 1)) return; @@ -635,6 +650,9 @@ void IrcServerHandler::handle005(const QString &prefix, const QList QString value = rawSupport.section("=", 1); network()->addSupport(key, value); } + + /* determine our prefixes here to get an accurate result */ + network()->determinePrefixes(); } /* RPL_UMODEIS - " []" */ @@ -783,7 +801,8 @@ void IrcServerHandler::handle311(const QString &prefix, const QList ircuser->setRealName(serverDecode(params.last())); emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(ircuser->nick()).arg(ircuser->hostmask()).arg(ircuser->realName())); } else { - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(serverDecode(params[1])).arg(serverDecode(params[2])).arg(serverDecode(params.last()))); + QString host = QString("%1!%2@%3").arg(serverDecode(params[0])).arg(serverDecode(params[1])).arg(serverDecode(params[2])); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(serverDecode(params[0])).arg(host).arg(serverDecode(params.last()))); } } @@ -867,7 +886,16 @@ void IrcServerHandler::handle317(const QString &prefix, const QList emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 (%3)").arg(ircuser->nick()).arg(secondsToString(ircuser->idleTime().secsTo(now))).arg(ircuser->idleTime().toString())); } else { - emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" "))); + QDateTime now = QDateTime::currentDateTime(); + int idleSecs = serverDecode(params[1]).toInt(); + idleSecs *= -1; + QDateTime idleSince = now.addSecs(idleSecs); + if (params.size() > 3) { // we have a signon time + int loginTime = serverDecode(params[2]).toInt(); + QDateTime datetime = QDateTime::fromTime_t(loginTime); + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is logged in since %2").arg(nick).arg(datetime.toString())); + } + emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 (%3)").arg(nick).arg(secondsToString(idleSince.secsTo(now))).arg(idleSince.toString())); } } @@ -1024,6 +1052,23 @@ void IrcServerHandler::handle333(const QString &prefix, const QList tr("Topic set by %1 on %2") .arg(serverDecode(params[1]), QDateTime::fromTime_t(channelDecode(channel, params[2]).toUInt()).toString())); } +/* RPL_INVITING - " */ +void IrcServerHandler::handle341(const QString &prefix, const QList ¶ms) { + Q_UNUSED(prefix); + if(!checkParamCount("IrcServerHandler::handle341()", params, 2)) + return; + + QString nick = serverDecode(params[0]); + + IrcChannel *channel = network()->ircChannel(serverDecode(params[1])); + if(!channel) { + 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())); +} + /* RPL_WHOREPLY: " ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] : " */ void IrcServerHandler::handle352(const QString &prefix, const QList ¶ms) {