From 3119a9bab362979626d99ec5e2ee0de4d8ba8969 Mon Sep 17 00:00:00 2001 From: pajlada Date: Sun, 15 May 2022 08:08:28 +0200 Subject: [PATCH] Store serverReceivedTime in messages (#3735) Co-authored-by: James Upjohn --- src/messages/Message.hpp | 1 + src/providers/irc/IrcMessageBuilder.cpp | 4 ++-- src/providers/irc/IrcServer.cpp | 2 +- src/providers/twitch/IrcMessageHandler.cpp | 12 ++++++------ src/providers/twitch/TwitchMessageBuilder.cpp | 4 ++-- src/util/IrcHelpers.hpp | 10 +++++----- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/messages/Message.hpp b/src/messages/Message.hpp index 9321b570..d3e25832 100644 --- a/src/messages/Message.hpp +++ b/src/messages/Message.hpp @@ -63,6 +63,7 @@ struct Message : boost::noncopyable { QString timeoutUser; QString channelName; QColor usernameColor; + QDateTime serverReceivedTime; std::vector badges; std::map badgeInfos; std::shared_ptr highlightColor; diff --git a/src/providers/irc/IrcMessageBuilder.cpp b/src/providers/irc/IrcMessageBuilder.cpp index ab818f07..77d36fc5 100644 --- a/src/providers/irc/IrcMessageBuilder.cpp +++ b/src/providers/irc/IrcMessageBuilder.cpp @@ -58,8 +58,8 @@ MessagePtr IrcMessageBuilder::build() // PUSH ELEMENTS this->appendChannelName(); - this->emplace( - calculateMessageTimestamp(this->ircMessage)); + this->message().serverReceivedTime = calculateMessageTime(this->ircMessage); + this->emplace(this->message().serverReceivedTime.time()); this->appendUsername(); diff --git a/src/providers/irc/IrcServer.cpp b/src/providers/irc/IrcServer.cpp index ded749d9..91c1bfda 100644 --- a/src/providers/irc/IrcServer.cpp +++ b/src/providers/irc/IrcServer.cpp @@ -270,7 +270,7 @@ void IrcServer::readConnectionMessageReceived(Communi::IrcMessage *message) MessageBuilder builder; builder.emplace( - calculateMessageTimestamp(message)); + calculateMessageTime(message).time()); builder.emplace(message->toData(), MessageElementFlag::Text); builder->flags.set(MessageFlag::Debug); diff --git a/src/providers/twitch/IrcMessageHandler.cpp b/src/providers/twitch/IrcMessageHandler.cpp index cbcae93c..d1a9d640 100644 --- a/src/providers/twitch/IrcMessageHandler.cpp +++ b/src/providers/twitch/IrcMessageHandler.cpp @@ -421,7 +421,7 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message) chan->disableAllMessages(); chan->addMessage( makeSystemMessage("Chat has been cleared by a moderator.", - calculateMessageTimestamp(message))); + calculateMessageTime(message).time())); return; } @@ -437,7 +437,7 @@ void IrcMessageHandler::handleClearChatMessage(Communi::IrcMessage *message) auto timeoutMsg = MessageBuilder(timeoutMessage, username, durationInSeconds, false, - calculateMessageTimestamp(message)) + calculateMessageTime(message).time()) .release(); chan->addOrReplaceTimeout(timeoutMsg); @@ -656,7 +656,7 @@ std::vector IrcMessageHandler::parseUserNoticeMessage( } auto b = MessageBuilder(systemMessage, parseTagString(messageText), - calculateMessageTimestamp(message)); + calculateMessageTime(message).time()); b->flags.set(MessageFlag::Subscription); auto newMessage = b.release(); @@ -710,7 +710,7 @@ void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message, } auto b = MessageBuilder(systemMessage, parseTagString(messageText), - calculateMessageTimestamp(message)); + calculateMessageTime(message).time()); b->flags.set(MessageFlag::Subscription); auto newMessage = b.release(); @@ -780,7 +780,7 @@ std::vector IrcMessageHandler::parseNoticeMessage( .arg(remainingTime.isEmpty() ? "0s" : remainingTime); builtMessage.emplace_back(makeSystemMessage( - formattedMessage, calculateMessageTimestamp(message))); + formattedMessage, calculateMessageTime(message).time())); return builtMessage; } @@ -789,7 +789,7 @@ std::vector IrcMessageHandler::parseNoticeMessage( std::vector builtMessages; builtMessages.emplace_back(makeSystemMessage( - message->content(), calculateMessageTimestamp(message))); + message->content(), calculateMessageTime(message).time())); return builtMessages; } diff --git a/src/providers/twitch/TwitchMessageBuilder.cpp b/src/providers/twitch/TwitchMessageBuilder.cpp index bdfb199a..3f89bb26 100644 --- a/src/providers/twitch/TwitchMessageBuilder.cpp +++ b/src/providers/twitch/TwitchMessageBuilder.cpp @@ -187,8 +187,8 @@ MessagePtr TwitchMessageBuilder::build() } // timestamp - this->emplace( - calculateMessageTimestamp(this->ircMessage)); + this->message().serverReceivedTime = calculateMessageTime(this->ircMessage); + this->emplace(this->message().serverReceivedTime.time()); if (this->shouldAddModerationElements()) { diff --git a/src/util/IrcHelpers.hpp b/src/util/IrcHelpers.hpp index 803bed22..faa3fd71 100644 --- a/src/util/IrcHelpers.hpp +++ b/src/util/IrcHelpers.hpp @@ -58,7 +58,7 @@ inline QString parseTagString(const QString &input) return output; } -inline QTime calculateMessageTimestamp(const Communi::IrcMessage *message) +inline QDateTime calculateMessageTime(const Communi::IrcMessage *message) { // Check if message is from recent-messages API if (message->tags().contains("historical")) @@ -71,14 +71,14 @@ inline QTime calculateMessageTimestamp(const Communi::IrcMessage *message) ts = message->tags().value("tmi-sent-ts").toLongLong(); } - return QDateTime::fromMSecsSinceEpoch(ts).time(); + return QDateTime::fromMSecsSinceEpoch(ts); } // If present, handle tmi-sent-ts tag and use it as timestamp if (message->tags().contains("tmi-sent-ts")) { auto ts = message->tags().value("tmi-sent-ts").toLongLong(); - return QDateTime::fromMSecsSinceEpoch(ts).time(); + return QDateTime::fromMSecsSinceEpoch(ts); } // Some IRC Servers might have server-time tag containing UTC date in ISO format, use it as timestamp @@ -89,11 +89,11 @@ inline QTime calculateMessageTimestamp(const Communi::IrcMessage *message) auto date = QDateTime::fromString(timedate, Qt::ISODate); date.setTimeSpec(Qt::TimeSpec::UTC); - return date.toLocalTime().time(); + return date.toLocalTime(); } // Fallback to current time - return QTime::currentTime(); + return QDateTime::currentDateTime(); } } // namespace chatterino