summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2020-09-10 23:57:36 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2020-09-10 23:57:36 -0400
commitb9fb7c536ae6ab46f15c355176edbd5d25db6669 (patch)
tree89d40423dbc35bd3b8ee4ffd2afa9a975fe0dca3 /components
parent54a8244bfdd26656260b3c82391db2213f937ac7 (diff)
downloadabaddon-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.cpp32
-rw-r--r--components/chatmessage.hpp15
-rw-r--r--components/chatwindow.cpp6
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();
}
}