show pinned message events

This commit is contained in:
ouwou
2020-09-22 00:07:55 -04:00
parent c6cc07122a
commit dbe9dc3c64
3 changed files with 30 additions and 14 deletions

View File

@@ -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("<span color='#999999'><i>[user joined]</i></span>");
switch (data->Type) {
case MessageType::GUILD_MEMBER_JOIN:
m_label->set_markup("<span color='#999999'><i>[user joined]</i></span>");
break;
case MessageType::CHANNEL_PINNED_MESSAGE:
m_label->set_markup("<span color='#999999'><i>[message pinned]</i></span>");
break;
default: break;
}
add(*m_label);
show_all();

View File

@@ -10,6 +10,7 @@ enum class ChatDisplayType {
Embed,
Image,
GuildMemberJoin,
ChannelPinnedMessage,
};
// contains the username and timestamp, chat items get stuck into its box

View File

@@ -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;