From 5703d06c7396814b239a621d03ef983372491d34 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 4 Nov 2023 20:54:15 -0400 Subject: show animated reactions --- src/components/chatmessage.cpp | 6 +++++- src/discord/emoji.cpp | 4 ++++ src/discord/emoji.hpp | 2 ++ src/discord/store.cpp | 25 +++++++++++++++++++------ 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index 44396a2..d884077 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -620,7 +620,11 @@ Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message &d } else { // custom ev->set_tooltip_text(reaction.Emoji.Name); - auto img = Gtk::manage(new LazyImage(reaction.Emoji.GetURL(), 16, 16)); + auto *img = Gtk::make_managed(reaction.Emoji.GetURL(), 16, 16); + if (reaction.Emoji.IsEmojiAnimated() && Abaddon::Get().GetSettings().ShowAnimations) { + img->SetURL(reaction.Emoji.GetURL("gif")); + img->SetAnimated(true); + } img->set_can_focus(false); box->add(*img); } diff --git a/src/discord/emoji.cpp b/src/discord/emoji.cpp index a21b9bd..9c63558 100644 --- a/src/discord/emoji.cpp +++ b/src/discord/emoji.cpp @@ -49,3 +49,7 @@ std::string EmojiData::URLFromID(Snowflake emoji_id, const char *ext, const char std::string EmojiData::URLFromID(const Glib::ustring &emoji_id, const char *ext, const char *size) { return URLFromID(emoji_id.raw(), ext, size); } + +bool EmojiData::IsEmojiAnimated() const noexcept { + return IsAnimated.has_value() && *IsAnimated; +} diff --git a/src/discord/emoji.hpp b/src/discord/emoji.hpp index 156e127..a7b994f 100644 --- a/src/discord/emoji.hpp +++ b/src/discord/emoji.hpp @@ -22,4 +22,6 @@ struct EmojiData { static std::string URLFromID(const std::string &emoji_id, const char *ext = "png", const char *size = nullptr); static std::string URLFromID(Snowflake emoji_id, const char *ext = "png", const char *size = nullptr); static std::string URLFromID(const Glib::ustring &emoji_id, const char *ext = "png", const char *size = nullptr); + + bool IsEmojiAnimated() const noexcept; }; diff --git a/src/discord/store.cpp b/src/discord/store.cpp index dfeb7d1..817f71f 100644 --- a/src/discord/store.cpp +++ b/src/discord/store.cpp @@ -1056,11 +1056,12 @@ Message Store::GetMessageBound(std::unique_ptr &s) const { while (s->FetchOne()) { size_t idx; ReactionData q; - s->Get(0, q.Emoji.ID); - s->Get(1, q.Emoji.Name); - s->Get(2, q.Count); - s->Get(3, q.HasReactedWith); - s->Get(4, idx); + s->Get(0, q.Count); + s->Get(1, q.HasReactedWith); + s->Get(2, idx); + s->Get(3, q.Emoji.ID); + s->Get(4, q.Emoji.Name); + s->Get(5, q.Emoji.IsAnimated); tmp[idx] = q; } s->Reset(); @@ -2291,7 +2292,19 @@ bool Store::CreateStatements() { } m_stmt_get_reactions = std::make_unique(m_db, R"( - SELECT emoji_id, name, count, me, idx FROM reactions WHERE message = ? + SELECT + reactions.count, + reactions.me, + reactions.idx, + emojis.id, + emojis.name, + emojis.animated + FROM + reactions + INNER JOIN + emojis ON reactions.emoji_id = emojis.id + WHERE + message = ? )"); if (!m_stmt_get_reactions->OK()) { fprintf(stderr, "failed to prepare get reactions statement: %s\n", m_db.ErrStr()); -- cgit v1.2.3