From 4bd5c8926626d267806a06cf04867a826d77576f Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sun, 20 Feb 2022 01:20:19 -0500 Subject: fix and refactor multiple embeds in one message --- src/components/chatmessage.cpp | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) (limited to 'src/components/chatmessage.cpp') diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index 69e46a6..2111bcc 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -45,21 +45,8 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(const Message &d } if (!data.Embeds.empty()) { - // todo refactor (all of) this lol - auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); - container->m_embed_component = box; + container->m_embed_component = container->CreateEmbedsComponent(data.Embeds); container->m_main.add(*container->m_embed_component); - for (const auto &embed : data.Embeds) { - if (IsEmbedImageOnly(embed)) { - auto *widget = container->CreateImageComponent(*embed.Thumbnail->ProxyURL, *embed.Thumbnail->URL, *embed.Thumbnail->Width, *embed.Thumbnail->Height); - container->AttachEventHandlers(*widget); - container->m_main.add(*widget); - } else { - auto *widget = container->CreateEmbedComponent(embed); - container->AttachEventHandlers(*widget); - box->add(*widget); - } - } } // i dont think attachments can be edited @@ -112,10 +99,11 @@ void ChatMessageItemContainer::UpdateContent() { m_embed_component = nullptr; } - if (data->Embeds.size() == 1) { - m_embed_component = CreateEmbedComponent(data->Embeds[0]); + if (!data->Embeds.empty()) { + m_embed_component = CreateEmbedsComponent(data->Embeds); AttachEventHandlers(*m_embed_component); m_main.add(*m_embed_component); + m_embed_component->show_all(); } } @@ -303,6 +291,24 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) { } } +Gtk::Widget *ChatMessageItemContainer::CreateEmbedsComponent(const std::vector &embeds) { + auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); + for (const auto &embed : embeds) { + if (IsEmbedImageOnly(embed)) { + auto *widget = CreateImageComponent(*embed.Thumbnail->ProxyURL, *embed.Thumbnail->URL, *embed.Thumbnail->Width, *embed.Thumbnail->Height); + widget->show(); + AttachEventHandlers(*widget); + box->add(*widget); + } else { + auto *widget = CreateEmbedComponent(embed); + widget->show(); + AttachEventHandlers(*widget); + box->add(*widget); + } + } + return box; +} + Gtk::Widget *ChatMessageItemContainer::CreateEmbedComponent(const EmbedData &embed) { Gtk::EventBox *ev = Gtk::manage(new Gtk::EventBox); ev->set_can_focus(true); -- cgit v1.2.3