diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-02-20 01:20:19 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-02-20 01:20:19 -0500 |
commit | 4bd5c8926626d267806a06cf04867a826d77576f (patch) | |
tree | 68f7cfe760ef976bd302dfe4e502f430b72cff76 | |
parent | a0599ab812280c74fdeb6b622bf9701f10d659ea (diff) | |
download | abaddon-portaudio-4bd5c8926626d267806a06cf04867a826d77576f.tar.gz abaddon-portaudio-4bd5c8926626d267806a06cf04867a826d77576f.zip |
fix and refactor multiple embeds in one message
-rw-r--r-- | src/components/chatmessage.cpp | 38 | ||||
-rw-r--r-- | src/components/chatmessage.hpp | 1 |
2 files changed, 23 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); diff --git a/src/components/chatmessage.hpp b/src/components/chatmessage.hpp index bd99275..cf7dd3d 100644 --- a/src/components/chatmessage.hpp +++ b/src/components/chatmessage.hpp @@ -22,6 +22,7 @@ protected: void AddClickHandler(Gtk::Widget *widget, std::string); Gtk::TextView *CreateTextComponent(const Message &data); // Message.Content void UpdateTextComponent(Gtk::TextView *tv); + Gtk::Widget *CreateEmbedsComponent(const std::vector<EmbedData> &embeds); Gtk::Widget *CreateEmbedComponent(const EmbedData &data); // Message.Embeds[0] Gtk::Widget *CreateImageComponent(const std::string &proxy_url, const std::string &url, int inw, int inh); Gtk::Widget *CreateAttachmentComponent(const AttachmentData &data); // non-image attachments |