void EventStringifier::processIrcEventPong(IrcEvent *e)
{
- // Some IRC servers respond with only one parameter, others respond with two, with the latter
- // being the text sent. Handle both situations.
- QString timestamp;
- if (e->params().count() < 2) {
- // Only one parameter received
- // :localhost PONG 02:43:49.565
- timestamp = e->params().at(0);
- } else {
- // Two parameters received, pick the second
- // :localhost PONG localhost :02:43:49.565
- timestamp = e->params().at(1);
- }
+ // CoreSessionEventProcessor will flag automated PONG replies as EventManager::Silent. There's
+ // no need to handle that specially here.
- // Attempt to parse the timestamp
- QTime sendTime = QTime::fromString(timestamp, "hh:mm:ss.zzz");
- if (!sendTime.isValid()) {
- // No valid timestamp found, this is most likely a user-specified PING message.
- //
- // Or the IRC server is returning whatever it feels like to PING messages, in which case..
- // sorry. Increase the ping timeout delay in Quassel to as high as possible, and go
- // encourage your IRC server developer to fix their stuff.
- displayMsg(e, Message::Server, "PONG " + e->params().join(" "), e->prefix());
- }
+ // Format the PONG reply for display
+ displayMsg(e, Message::Server, "PONG " + e->params().join(" "), e->prefix());
}
QDateTime now = QDateTime::currentDateTime();
now.setTimeSpec(Qt::UTC);
// Don't print "user is away" messages more often than this
- const int silenceTime = 60;
- if (ircuser->lastAwayMessageTime().addSecs(silenceTime) >= now)
+ // 1 hour = 60 min * 60 sec
+ const int silenceTime = 60 * 60;
+ // Check if away state has NOT changed and silence time hasn't yet elapsed
+ if (!ircuser->hasAwayChanged()
+ && ircuser->lastAwayMessageTime().addSecs(silenceTime) >= now) {
+ // Away message hasn't changed and we're still within the period of silence; don't
+ // repeat the message
send = false;
+ }
ircuser->setLastAwayMessageTime(now);
+ // Mark any changes in away as acknowledged
+ ircuser->acknowledgeAwayChanged();
}
}
if (send)
switch (e->params().count()) {
case 3:
topic = e->params()[2];
- [[clang::fallthrough]];
+ // fallthrough
case 2:
userCount = e->params()[1].toUInt();
- [[clang::fallthrough]];
+ /* fallthrough */
case 1:
channelName = e->params()[0];
- [[clang::fallthrough]];
+ // blubb
default:
break;
}