mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-19 20:11:59 +03:00
fix edited/deleted being reset on channel change
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user