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(-)
(limited to 'components')
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