*/
const QString USERHOST_IN_NAMES = "userhost-in-names";
+ /**
+ * Server time for messages.
+ *
+ * https://ircv3.net/specs/extensions/server-time-3.2.html
+ */
+ const QString SERVER_TIME = "server-time";
+
/**
* Vendor-specific capabilities
*/
MULTI_PREFIX,
SASL,
USERHOST_IN_NAMES,
+ SERVER_TIME,
Vendor::TWITCH_MEMBERSHIP,
Vendor::ZNC_SELF_MESSAGE};
// NOTE: If you modify the knownCaps list, update the constants above as needed.
void CoreSession::processMessageEvent(MessageEvent* event)
{
recvMessageFromServer(RawMessage{
+ event->timestamp(),
event->networkId(),
event->msgType(),
event->bufferType(),
Q_ASSERT(!createBuffer);
bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, "");
}
- Message msg(bufferInfo,
+ Message msg(rawMsg.timestamp,
+ bufferInfo,
rawMsg.type,
rawMsg.text,
rawMsg.sender,
}
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo,
+ Message msg(rawMsg.timestamp,
+ bufferInfo,
rawMsg.type,
rawMsg.text,
rawMsg.sender,
// add the StatusBuffer to the Cache in case there are more Messages for the original target
bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo;
}
- Message msg(bufferInfo,
+ Message msg(rawMsg.timestamp,
+ bufferInfo,
rawMsg.type,
rawMsg.text,
rawMsg.sender,
struct RawMessage
{
+ QDateTime timestamp;
NetworkId networkId;
Message::Type type;
BufferInfo::Type bufferType;
QString sender;
Message::Flags flags;
- RawMessage(NetworkId networkId,
+ RawMessage(QDateTime timestamp,
+ NetworkId networkId,
Message::Type type,
BufferInfo::Type bufferType,
QString target,
QString text,
QString sender,
Message::Flags flags)
- : networkId(networkId)
+ : timestamp(std::move(timestamp))
+ , networkId(networkId)
, type(type)
, bufferType(bufferType)
, target(std::move(target))
RawMessage(NetworkId networkId,
const NetworkInternalMessage& msg)
- : networkId(networkId)
+ : timestamp(QDateTime::currentDateTimeUtc())
+ , networkId(networkId)
, type(msg.type)
, bufferType(msg.bufferType)
, target(msg.target)
qDebug() << "IRC net" << net->networkId() << "<<" << tags << prefix << cmd << params;
}
+ IrcTagKey serverTimeTag{"", "time", false};
+ if (tags.contains(serverTimeTag)) {
+ QDateTime serverTime = QDateTime::fromString(tags[serverTimeTag], "yyyy-MM-ddThh:mm:ss.zzzZ");
+ serverTime.setTimeSpec(Qt::UTC);
+ if (serverTime.isValid()) {
+ e->setTimestamp(serverTime);
+ } else {
+ qDebug() << "Invalid timestamp from server-time tag:" << tags[serverTimeTag];
+ }
+ }
+
QList<Event*> events;
EventManager::EventType type = EventManager::Invalid;