diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-10 23:57:36 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2020-09-10 23:57:36 -0400 |
commit | b9fb7c536ae6ab46f15c355176edbd5d25db6669 (patch) | |
tree | 89d40423dbc35bd3b8ee4ffd2afa9a975fe0dca3 /components | |
parent | 54a8244bfdd26656260b3c82391db2213f937ac7 (diff) | |
download | abaddon-portaudio-b9fb7c536ae6ab46f15c355176edbd5d25db6669.tar.gz abaddon-portaudio-b9fb7c536ae6ab46f15c355176edbd5d25db6669.zip |
fix edited/deleted being reset on channel change
Diffstat (limited to 'components')
-rw-r--r-- | components/chatmessage.cpp | 32 | ||||
-rw-r--r-- | components/chatmessage.hpp | 15 | ||||
-rw-r--r-- | components/chatwindow.cpp | 6 |
3 files changed, 19 insertions, 34 deletions
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp index d6b0cad..c3f4dae 100644 --- a/components/chatmessage.cpp +++ b/components/chatmessage.cpp @@ -183,19 +183,15 @@ void ChatMessageTextItem::on_menu_copy_content() { Gtk::Clipboard::get()->set_text(m_content); } -void ChatMessageTextItem::MarkAsDeleted() { - m_was_deleted = true; - UpdateAttributes(); -} - -void ChatMessageTextItem::MarkAsEdited() { - m_was_edited = true; +void ChatMessageTextItem::Update() { UpdateAttributes(); } void ChatMessageTextItem::UpdateAttributes() { - bool deleted = m_was_deleted; - bool edited = m_was_edited && !m_was_deleted; + const auto *data = Abaddon::Get().GetDiscordClient().GetMessage(ID); + if (data == nullptr) return; + bool deleted = data->IsDeleted(); + bool edited = data->IsEdited(); auto buf = get_buffer(); buf->set_text(m_content); @@ -334,14 +330,16 @@ void ChatMessageEmbedItem::DoLayout() { } void ChatMessageEmbedItem::UpdateAttributes() { - bool deleted = m_was_deleted; - bool edited = m_was_edited && !m_was_deleted; + const auto *data = Abaddon::Get().GetDiscordClient().GetMessage(ID); + if (data == nullptr) return; + bool deleted = data->IsDeleted(); + bool edited = data->IsEdited(); if (m_attrib_label == nullptr) { m_attrib_label = Gtk::manage(new Gtk::Label); m_attrib_label->set_use_markup(true); m_attrib_label->show(); - m_main->pack_end(*m_attrib_label); + m_main->pack_start(*m_attrib_label); } if (deleted) @@ -350,12 +348,6 @@ void ChatMessageEmbedItem::UpdateAttributes() { m_attrib_label->set_markup(" <span color='#999999'> [edited]</span>"); } -void ChatMessageEmbedItem::MarkAsDeleted() { - m_was_deleted = true; - // UpdateAttributes(); untested -} - -void ChatMessageEmbedItem::MarkAsEdited() { - m_was_edited = true; - // UpdateAttributes(); +void ChatMessageEmbedItem::Update() { + UpdateAttributes(); } diff --git a/components/chatmessage.hpp b/components/chatmessage.hpp index 3c3e29e..e7202a5 100644 --- a/components/chatmessage.hpp +++ b/components/chatmessage.hpp @@ -40,8 +40,7 @@ public: virtual void ShowMenu(const GdkEvent *event); void AddMenuItem(Gtk::MenuItem *item); - virtual void MarkAsDeleted() = 0; - virtual void MarkAsEdited() = 0; + virtual void Update() = 0; protected: void AttachMenuHandler(Gtk::Widget *widget); @@ -74,17 +73,13 @@ public: void EditContent(std::string content); - virtual void MarkAsDeleted(); - virtual void MarkAsEdited(); + virtual void Update(); protected: void UpdateAttributes(); std::string m_content; - bool m_was_deleted = false; - bool m_was_edited = false; - void on_menu_copy_content(); Gtk::MenuItem *m_menu_copy_content; Gtk::MenuItem *m_menu_delete_message; @@ -96,16 +91,12 @@ class ChatMessageEmbedItem public: ChatMessageEmbedItem(const Message *data); - virtual void MarkAsDeleted(); - virtual void MarkAsEdited(); + virtual void Update(); protected: void DoLayout(); void UpdateAttributes(); - bool m_was_deleted = false; - bool m_was_edited = false; - EmbedData m_embed; Gtk::Box *m_main; Gtk::Label *m_attrib_label = nullptr; diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp index 42e0a2c..d8ae2b7 100644 --- a/components/chatwindow.cpp +++ b/components/chatwindow.cpp @@ -129,12 +129,14 @@ void ChatWindow::ProcessMessage(const Message *data, bool prepend) { text->signal_action_message_edit().connect([this](Snowflake channel_id, Snowflake id) { m_signal_action_message_edit.emit(channel_id, id); }); + text->Update(); container->AddNewContent(text, prepend); m_id_to_widget[data->ID] = text; } else if (type == ChatDisplayType::Embed) { auto *widget = Gtk::manage(new ChatMessageEmbedItem(data)); widget->ID = data->ID; widget->ChannelID = m_active_channel; + widget->Update(); container->AddNewContent(widget, prepend); m_id_to_widget[data->ID] = widget; } @@ -266,7 +268,7 @@ void ChatWindow::DeleteMessageInternal() { // todo actually delete it when it becomes setting auto *item = m_id_to_widget.at(id); - item->MarkAsDeleted(); + item->Update(); } void ChatWindow::UpdateMessageContentInternal() { @@ -284,7 +286,7 @@ void ChatWindow::UpdateMessageContentInternal() { auto *item = dynamic_cast<ChatMessageTextItem *>(m_id_to_widget.at(id)); if (item != nullptr) { item->EditContent(msg->Content); - item->MarkAsEdited(); + item->Update(); } } |