refactor(eventsub): more references, less const (#5953)

This commit is contained in:
nerix
2025-02-13 13:46:52 +01:00
committed by GitHub
parent 9c96dd53c7
commit 9afd60534a
16 changed files with 154 additions and 139 deletions
+1 -1
View File
@@ -25,7 +25,7 @@
- Bugfix: Fixed search in emote popup not always working correctly. (#5946) - Bugfix: Fixed search in emote popup not always working correctly. (#5946)
- Bugfix: Fixed channel point redemptions with messages not showing up if PubSub is disconnected. (#5948) - Bugfix: Fixed channel point redemptions with messages not showing up if PubSub is disconnected. (#5948)
- Dev: Subscriptions to PubSub channel points redemption topics now use no auth token, making it continue to work during PubSub shutdown. (#5947) - Dev: Subscriptions to PubSub channel points redemption topics now use no auth token, making it continue to work during PubSub shutdown. (#5947)
- Dev: Add initial experimental EventSub support. (#5837, #5895, #5897, #5904, #5910, #5903, #5915, #5916, #5930, #5935, #5932, #5943, #5952) - Dev: Add initial experimental EventSub support. (#5837, #5895, #5897, #5904, #5910, #5903, #5915, #5916, #5930, #5935, #5932, #5943, #5952, #5953)
- Dev: Remove unneeded platform specifier for toasts. (#5914) - Dev: Remove unneeded platform specifier for toasts. (#5914)
- Dev: Highlight checks now use non-capturing groups for the boundaries. (#5784) - Dev: Highlight checks now use non-capturing groups for the boundaries. (#5784)
- Dev: Removed unused PubSub whisper code. (#5898) - Dev: Removed unused PubSub whisper code. (#5898)
+23 -18
View File
@@ -14,7 +14,8 @@ using namespace chatterino::eventsub::lib;
std::vector<boost::beast::flat_buffer> readMessages() std::vector<boost::beast::flat_buffer> readMessages()
{ {
QFile file(":/bench/messages.ndjson"); QFile file(":/bench/messages.ndjson");
assert(file.open(QFile::ReadOnly)); bool ok = file.open(QFile::ReadOnly);
assert(ok);
std::vector<boost::beast::flat_buffer> messages; std::vector<boost::beast::flat_buffer> messages;
while (!file.atEnd()) while (!file.atEnd())
@@ -41,67 +42,71 @@ public:
NoopListener() = default; NoopListener() = default;
// NOLINTBEGIN(cppcoreguidelines-pro-type-const-cast) // NOLINTBEGIN(cppcoreguidelines-pro-type-const-cast)
void onSessionWelcome(messages::Metadata metadata, void onSessionWelcome(
payload::session_welcome::Payload payload) override const messages::Metadata &metadata,
const payload::session_welcome::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onNotification(messages::Metadata metadata, void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) override const boost::json::value &jv) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&jv); benchmark::DoNotOptimize(&jv);
} }
void onChannelBan(messages::Metadata metadata, void onChannelBan(const messages::Metadata &metadata,
payload::channel_ban::v1::Payload payload) override const payload::channel_ban::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onStreamOnline(messages::Metadata metadata, void onStreamOnline(
payload::stream_online::v1::Payload payload) override const messages::Metadata &metadata,
const payload::stream_online::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onStreamOffline(messages::Metadata metadata, void onStreamOffline(
payload::stream_offline::v1::Payload payload) override const messages::Metadata &metadata,
const payload::stream_offline::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onChannelChatNotification( void onChannelChatNotification(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_notification::v1::Payload payload) override const payload::channel_chat_notification::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onChannelUpdate(messages::Metadata metadata, void onChannelUpdate(
payload::channel_update::v1::Payload payload) override const messages::Metadata &metadata,
const payload::channel_update::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onChannelChatMessage( void onChannelChatMessage(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_message::v1::Payload payload) override const payload::channel_chat_message::v1::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
} }
void onChannelModerate( void onChannelModerate(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_moderate::v2::Payload payload) override const payload::channel_moderate::v2::Payload &payload) override
{ {
benchmark::DoNotOptimize(&metadata); benchmark::DoNotOptimize(&metadata);
benchmark::DoNotOptimize(&payload); benchmark::DoNotOptimize(&payload);
@@ -18,39 +18,40 @@ public:
virtual ~Listener() = default; virtual ~Listener() = default;
virtual void onSessionWelcome( virtual void onSessionWelcome(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::session_welcome::Payload payload) = 0; const payload::session_welcome::Payload &payload) = 0;
virtual void onNotification(messages::Metadata metadata, virtual void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) = 0; const boost::json::value &jv) = 0;
// Subscription types // Subscription types
virtual void onChannelBan(messages::Metadata metadata, virtual void onChannelBan(
payload::channel_ban::v1::Payload payload) = 0; const messages::Metadata &metadata,
const payload::channel_ban::v1::Payload &payload) = 0;
virtual void onStreamOnline( virtual void onStreamOnline(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::stream_online::v1::Payload payload) = 0; const payload::stream_online::v1::Payload &payload) = 0;
virtual void onStreamOffline( virtual void onStreamOffline(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::stream_offline::v1::Payload payload) = 0; const payload::stream_offline::v1::Payload &payload) = 0;
virtual void onChannelChatNotification( virtual void onChannelChatNotification(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_notification::v1::Payload payload) = 0; const payload::channel_chat_notification::v1::Payload &payload) = 0;
virtual void onChannelUpdate( virtual void onChannelUpdate(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_update::v1::Payload payload) = 0; const payload::channel_update::v1::Payload &payload) = 0;
virtual void onChannelChatMessage( virtual void onChannelChatMessage(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_message::v1::Payload payload) = 0; const payload::channel_chat_message::v1::Payload &payload) = 0;
virtual void onChannelModerate( virtual void onChannelModerate(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_moderate::v2::Payload payload) = 0; const payload::channel_moderate::v2::Payload &payload) = 0;
// Add your new subscription types above this line // Add your new subscription types above this line
}; };
@@ -21,13 +21,13 @@ namespace chatterino::eventsub::lib::messages {
*/ */
struct Metadata { struct Metadata {
const std::string messageID; std::string messageID;
const std::string messageType; std::string messageType;
// TODO: should this be chronofied? // TODO: should this be chronofied?
const std::string messageTimestamp; std::string messageTimestamp;
const std::optional<std::string> subscriptionType; std::optional<std::string> subscriptionType;
const std::optional<std::string> subscriptionVersion; std::optional<std::string> subscriptionVersion;
}; };
#include "twitch-eventsub-ws/messages/metadata.inc" #include "twitch-eventsub-ws/messages/metadata.inc"
@@ -91,9 +91,9 @@ struct Event {
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/channel-ban-v1.inc" #include "twitch-eventsub-ws/payloads/channel-ban-v1.inc"
@@ -135,9 +135,9 @@ struct Event {
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/channel-chat-message-v1.inc" #include "twitch-eventsub-ws/payloads/channel-chat-message-v1.inc"
@@ -190,9 +190,9 @@ struct Event {
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/channel-chat-notification-v1.inc" #include "twitch-eventsub-ws/payloads/channel-chat-notification-v1.inc"
@@ -10,31 +10,31 @@ namespace chatterino::eventsub::lib::payload::channel_update::v1 {
struct Event { struct Event {
// The broadcaster's user ID // The broadcaster's user ID
const std::string broadcasterUserID; std::string broadcasterUserID;
// The broadcaster's user login // The broadcaster's user login
const std::string broadcasterUserLogin; std::string broadcasterUserLogin;
// The broadcaster's user display name // The broadcaster's user display name
const std::string broadcasterUserName; std::string broadcasterUserName;
// The channel's stream title // The channel's stream title
const std::string title; std::string title;
// The channel's broadcast language // The channel's broadcast language
const std::string language; std::string language;
// The channels category ID // The channels category ID
const std::string categoryID; std::string categoryID;
// The category name // The category name
const std::string categoryName; std::string categoryName;
// A boolean identifying whether the channel is flagged as mature // A boolean identifying whether the channel is flagged as mature
const bool isMature; bool isMature;
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/channel-update-v1.inc" #include "twitch-eventsub-ws/payloads/channel-update-v1.inc"
@@ -23,7 +23,7 @@ namespace chatterino::eventsub::lib::payload::session_welcome {
/// json_inner=session /// json_inner=session
struct Payload { struct Payload {
const std::string id; std::string id;
}; };
#include "twitch-eventsub-ws/payloads/session-welcome.inc" #include "twitch-eventsub-ws/payloads/session-welcome.inc"
@@ -10,17 +10,17 @@ namespace chatterino::eventsub::lib::payload::stream_offline::v1 {
struct Event { struct Event {
// The broadcaster's user ID // The broadcaster's user ID
const std::string broadcasterUserID; std::string broadcasterUserID;
// The broadcaster's user login // The broadcaster's user login
const std::string broadcasterUserLogin; std::string broadcasterUserLogin;
// The broadcaster's user display name // The broadcaster's user display name
const std::string broadcasterUserName; std::string broadcasterUserName;
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/stream-offline-v1.inc" #include "twitch-eventsub-ws/payloads/stream-offline-v1.inc"
@@ -10,27 +10,27 @@ namespace chatterino::eventsub::lib::payload::stream_online::v1 {
struct Event { struct Event {
// The ID of the stream // The ID of the stream
const std::string id; std::string id;
// The broadcaster's user ID // The broadcaster's user ID
const std::string broadcasterUserID; std::string broadcasterUserID;
// The broadcaster's user login // The broadcaster's user login
const std::string broadcasterUserLogin; std::string broadcasterUserLogin;
// The broadcaster's user display name // The broadcaster's user display name
const std::string broadcasterUserName; std::string broadcasterUserName;
// The stream type (e.g. live, playlist, watch_party) // The stream type (e.g. live, playlist, watch_party)
const std::string type; std::string type;
// The timestamp at which the stream went online // The timestamp at which the stream went online
// TODO: chronofy? // TODO: chronofy?
const std::string startedAt; std::string startedAt;
}; };
struct Payload { struct Payload {
const subscription::Subscription subscription; subscription::Subscription subscription;
const Event event; Event event;
}; };
#include "twitch-eventsub-ws/payloads/stream-online-v1.inc" #include "twitch-eventsub-ws/payloads/stream-online-v1.inc"
@@ -33,23 +33,23 @@ namespace chatterino::eventsub::lib::payload::subscription {
*/ */
struct Transport { struct Transport {
const std::string method; std::string method;
const std::string sessionID; std::string sessionID;
}; };
struct Subscription { struct Subscription {
const std::string id; std::string id;
const std::string status; std::string status;
const std::string type; std::string type;
const std::string version; std::string version;
// TODO: How do we map condition here? vector of key/value pairs? // TODO: How do we map condition here? vector of key/value pairs?
const Transport transport; Transport transport;
// TODO: chronofy? // TODO: chronofy?
const std::string createdAt; std::string createdAt;
const int cost; int cost;
}; };
#include "twitch-eventsub-ws/payloads/subscription.inc" #include "twitch-eventsub-ws/payloads/subscription.inc"
+9 -8
View File
@@ -32,15 +32,16 @@ using EventSubSubscription = std::pair<std::string, std::string>;
using NotificationHandlers = std::unordered_map< using NotificationHandlers = std::unordered_map<
EventSubSubscription, EventSubSubscription,
std::function<boost::system::error_code( std::function<boost::system::error_code(const messages::Metadata &,
messages::Metadata, boost::json::value, std::unique_ptr<Listener> &)>, const boost::json::value &,
std::unique_ptr<Listener> &)>,
boost::hash<EventSubSubscription>>; boost::hash<EventSubSubscription>>;
using MessageHandlers = using MessageHandlers = std::unordered_map<
std::unordered_map<std::string, std::function<boost::system::error_code( std::string,
messages::Metadata, boost::json::value, std::function<boost::system::error_code(
std::unique_ptr<Listener> &, const messages::Metadata &, const boost::json::value &,
const NotificationHandlers &)>>; std::unique_ptr<Listener> &, const NotificationHandlers &)>>;
namespace { namespace {
@@ -153,7 +154,7 @@ namespace {
{ {
return oPayload.error(); return oPayload.error();
} }
listener->onChannelModerate(metadata, std::move(*oPayload)); listener->onChannelModerate(metadata, *oPayload);
return boost::system::error_code{}; return boost::system::error_code{};
}, },
}, },
+21 -17
View File
@@ -55,51 +55,55 @@ boost::beast::flat_buffer readToFlatBuffer(const std::filesystem::path &path)
class NoOpListener : public chatterino::eventsub::lib::Listener class NoOpListener : public chatterino::eventsub::lib::Listener
{ {
void onSessionWelcome(messages::Metadata metadata, void onSessionWelcome(
payload::session_welcome::Payload payload) override const messages::Metadata &metadata,
const payload::session_welcome::Payload &payload) override
{ {
} }
void onNotification(messages::Metadata metadata, void onNotification(const messages::Metadata &metadata,
const boost::json::value &jv) override const boost::json::value &jv) override
{ {
} }
void onChannelBan(messages::Metadata metadata, void onChannelBan(const messages::Metadata &metadata,
payload::channel_ban::v1::Payload payload) override const payload::channel_ban::v1::Payload &payload) override
{ {
} }
void onStreamOnline(messages::Metadata metadata, void onStreamOnline(
payload::stream_online::v1::Payload payload) override const messages::Metadata &metadata,
const payload::stream_online::v1::Payload &payload) override
{ {
} }
void onStreamOffline(messages::Metadata metadata, void onStreamOffline(
payload::stream_offline::v1::Payload payload) override const messages::Metadata &metadata,
const payload::stream_offline::v1::Payload &payload) override
{ {
} }
void onChannelChatNotification( void onChannelChatNotification(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_notification::v1::Payload payload) override const payload::channel_chat_notification::v1::Payload &payload) override
{ {
} }
void onChannelUpdate(messages::Metadata metadata, void onChannelUpdate(
payload::channel_update::v1::Payload payload) override const messages::Metadata &metadata,
const payload::channel_update::v1::Payload &payload) override
{ {
} }
void onChannelChatMessage( void onChannelChatMessage(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_chat_message::v1::Payload payload) override const payload::channel_chat_message::v1::Payload &payload) override
{ {
} }
void onChannelModerate( void onChannelModerate(
messages::Metadata metadata, const messages::Metadata &metadata,
payload::channel_moderate::v2::Payload payload) override const payload::channel_moderate::v2::Payload &payload) override
{ {
} }
}; };
+18 -17
View File
@@ -28,8 +28,8 @@ const auto &LOG = chatterinoTwitchEventSub;
namespace chatterino::eventsub { namespace chatterino::eventsub {
void Connection::onSessionWelcome( void Connection::onSessionWelcome(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::session_welcome::Payload payload) const lib::payload::session_welcome::Payload &payload)
{ {
(void)metadata; (void)metadata;
qCDebug(LOG) << "On session welcome:" << payload.id.c_str(); qCDebug(LOG) << "On session welcome:" << payload.id.c_str();
@@ -37,7 +37,7 @@ void Connection::onSessionWelcome(
this->sessionID = QString::fromStdString(payload.id); this->sessionID = QString::fromStdString(payload.id);
} }
void Connection::onNotification(lib::messages::Metadata metadata, void Connection::onNotification(const lib::messages::Metadata &metadata,
const boost::json::value &jv) const boost::json::value &jv)
{ {
(void)metadata; (void)metadata;
@@ -45,8 +45,9 @@ void Connection::onNotification(lib::messages::Metadata metadata,
qCDebug(LOG) << "on notification: " << jsonString.c_str(); qCDebug(LOG) << "on notification: " << jsonString.c_str();
} }
void Connection::onChannelBan(lib::messages::Metadata metadata, void Connection::onChannelBan(
lib::payload::channel_ban::v1::Payload payload) const lib::messages::Metadata &metadata,
const lib::payload::channel_ban::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
@@ -91,8 +92,8 @@ void Connection::onChannelBan(lib::messages::Metadata metadata,
} }
void Connection::onStreamOnline( void Connection::onStreamOnline(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::stream_online::v1::Payload payload) const lib::payload::stream_online::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
qCDebug(LOG) << "On stream online event for channel" qCDebug(LOG) << "On stream online event for channel"
@@ -100,8 +101,8 @@ void Connection::onStreamOnline(
} }
void Connection::onStreamOffline( void Connection::onStreamOffline(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::stream_offline::v1::Payload payload) const lib::payload::stream_offline::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
qCDebug(LOG) << "On stream offline event for channel" qCDebug(LOG) << "On stream offline event for channel"
@@ -109,8 +110,8 @@ void Connection::onStreamOffline(
} }
void Connection::onChannelChatNotification( void Connection::onChannelChatNotification(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_chat_notification::v1::Payload payload) const lib::payload::channel_chat_notification::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
qCDebug(LOG) << "On channel chat notification for" qCDebug(LOG) << "On channel chat notification for"
@@ -118,8 +119,8 @@ void Connection::onChannelChatNotification(
} }
void Connection::onChannelUpdate( void Connection::onChannelUpdate(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_update::v1::Payload payload) const lib::payload::channel_update::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
qCDebug(LOG) << "On channel update for" qCDebug(LOG) << "On channel update for"
@@ -127,8 +128,8 @@ void Connection::onChannelUpdate(
} }
void Connection::onChannelChatMessage( void Connection::onChannelChatMessage(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_chat_message::v1::Payload payload) const lib::payload::channel_chat_message::v1::Payload &payload)
{ {
(void)metadata; (void)metadata;
@@ -137,8 +138,8 @@ void Connection::onChannelChatMessage(
} }
void Connection::onChannelModerate( void Connection::onChannelModerate(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_moderate::v2::Payload payload) const lib::payload::channel_moderate::v2::Payload &payload)
{ {
(void)metadata; (void)metadata;
+20 -17
View File
@@ -15,38 +15,41 @@ class Connection final : public lib::Listener
{ {
public: public:
void onSessionWelcome( void onSessionWelcome(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::session_welcome::Payload payload) override; const lib::payload::session_welcome::Payload &payload) override;
void onNotification(lib::messages::Metadata metadata, void onNotification(const lib::messages::Metadata &metadata,
const boost::json::value &jv) override; const boost::json::value &jv) override;
void onChannelBan(lib::messages::Metadata metadata, void onChannelBan(
lib::payload::channel_ban::v1::Payload payload) override; const lib::messages::Metadata &metadata,
const lib::payload::channel_ban::v1::Payload &payload) override;
void onStreamOnline( void onStreamOnline(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::stream_online::v1::Payload payload) override; const lib::payload::stream_online::v1::Payload &payload) override;
void onStreamOffline( void onStreamOffline(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::stream_offline::v1::Payload payload) override; const lib::payload::stream_offline::v1::Payload &payload) override;
void onChannelChatNotification( void onChannelChatNotification(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_chat_notification::v1::Payload payload) override; const lib::payload::channel_chat_notification::v1::Payload &payload)
override;
void onChannelUpdate( void onChannelUpdate(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_update::v1::Payload payload) override; const lib::payload::channel_update::v1::Payload &payload) override;
void onChannelChatMessage( void onChannelChatMessage(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_chat_message::v1::Payload payload) override; const lib::payload::channel_chat_message::v1::Payload &payload)
override;
void onChannelModerate( void onChannelModerate(
lib::messages::Metadata metadata, const lib::messages::Metadata &metadata,
lib::payload::channel_moderate::v2::Payload payload) override; const lib::payload::channel_moderate::v2::Payload &payload) override;
QString getSessionID() const; QString getSessionID() const;