From dbe9dc3c64555f1aaaed1755d37e6f8b450a54f6 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Tue, 22 Sep 2020 00:07:55 -0400 Subject: show pinned message events --- components/chatmessage.cpp | 11 +++++++++-- components/chatmessage.hpp | 1 + components/chatwindow.cpp | 32 ++++++++++++++++++++------------ 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp index 98bbcdc..c846e20 100644 --- a/components/chatmessage.cpp +++ b/components/chatmessage.cpp @@ -395,8 +395,15 @@ ChatMessageUserEventItem::ChatMessageUserEventItem(const Message *data) { set_hexpand(true); m_label->set_halign(Gtk::ALIGN_START); m_label->set_use_markup(); - if (data->Type == MessageType::GUILD_MEMBER_JOIN) - m_label->set_markup("[user joined]"); + switch (data->Type) { + case MessageType::GUILD_MEMBER_JOIN: + m_label->set_markup("[user joined]"); + break; + case MessageType::CHANNEL_PINNED_MESSAGE: + m_label->set_markup("[message pinned]"); + break; + default: break; + } add(*m_label); show_all(); diff --git a/components/chatmessage.hpp b/components/chatmessage.hpp index 35cdcd1..91c74f1 100644 --- a/components/chatmessage.hpp +++ b/components/chatmessage.hpp @@ -10,6 +10,7 @@ enum class ChatDisplayType { Embed, Image, GuildMemberJoin, + ChannelPinnedMessage, }; // contains the username and timestamp, chat items get stuck into its box diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp index c0a09a5..fe56bf1 100644 --- a/components/chatwindow.cpp +++ b/components/chatwindow.cpp @@ -89,6 +89,8 @@ ChatDisplayType ChatWindow::GetMessageDisplayType(const Message *data) { return ChatDisplayType::Embed; else if (data->Type == MessageType::GUILD_MEMBER_JOIN) return ChatDisplayType::GuildMemberJoin; + else if (data->Type == MessageType::CHANNEL_PINNED_MESSAGE) + return ChatDisplayType::ChannelPinnedMessage; return ChatDisplayType::Unknown; } @@ -97,19 +99,25 @@ ChatMessageItem *ChatWindow::CreateMessageComponent(const Message *data) { auto type = GetMessageDisplayType(data); ChatMessageItem *widget = nullptr; - if (type == ChatDisplayType::Text) { - widget = Gtk::manage(new ChatMessageTextItem(data)); + switch (type) { + case ChatDisplayType::Text: { + widget = Gtk::manage(new ChatMessageTextItem(data)); - widget->signal_action_message_delete().connect([this](Snowflake channel_id, Snowflake id) { - m_signal_action_message_delete.emit(channel_id, id); - }); - widget->signal_action_message_edit().connect([this](Snowflake channel_id, Snowflake id) { - m_signal_action_message_edit.emit(channel_id, id); - }); - } else if (type == ChatDisplayType::Embed) { - widget = Gtk::manage(new ChatMessageEmbedItem(data)); - } else if (type == ChatDisplayType::GuildMemberJoin) { - widget = Gtk::manage(new ChatMessageUserEventItem(data)); + widget->signal_action_message_delete().connect([this](Snowflake channel_id, Snowflake id) { + m_signal_action_message_delete.emit(channel_id, id); + }); + widget->signal_action_message_edit().connect([this](Snowflake channel_id, Snowflake id) { + m_signal_action_message_edit.emit(channel_id, id); + }); + } break; + case ChatDisplayType::Embed: { + widget = Gtk::manage(new ChatMessageEmbedItem(data)); + } break; + case ChatDisplayType::GuildMemberJoin: + case ChatDisplayType::ChannelPinnedMessage: { + widget = Gtk::manage(new ChatMessageUserEventItem(data)); + } break; + default: break; } if (widget == nullptr) return nullptr; -- cgit v1.2.3