diff options
Diffstat (limited to 'src/components/chatmessage.cpp')
-rw-r--r-- | src/components/chatmessage.cpp | 38 |
1 files changed, 22 insertions, 16 deletions
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<EmbedData> &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); |