summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-02-14 02:53:21 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2022-02-14 02:53:21 -0500
commit25fd2c38400d3cafa63343721899d59b42e639a5 (patch)
tree4a603fd24fa8112e5f1f7c5042390a42ea5f45e2
parent75213fcede7388e4390660fa2aa12ff253617fab (diff)
downloadabaddon-portaudio-25fd2c38400d3cafa63343721899d59b42e639a5.tar.gz
abaddon-portaudio-25fd2c38400d3cafa63343721899d59b42e639a5.zip
fix per-guild avatars
-rw-r--r--src/components/chatmessage.cpp8
-rw-r--r--src/discord/user.cpp29
-rw-r--r--src/discord/user.hpp4
3 files changed, 31 insertions, 10 deletions
diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp
index e5a65cd..d34730b 100644
--- a/src/components/chatmessage.cpp
+++ b/src/components/chatmessage.cpp
@@ -1,7 +1,7 @@
-#include "chatmessage.hpp"
#include "abaddon.hpp"
-#include "util.hpp"
+#include "chatmessage.hpp"
#include "lazyimage.hpp"
+#include "util.hpp"
#include <unordered_map>
constexpr static int EmojiSize = 24; // settings eventually
@@ -1068,11 +1068,11 @@ ChatMessageHeader::ChatMessageHeader(const Message &data)
};
img.LoadFromURL(author->GetAvatarURL(data.GuildID), sigc::track_obj(cb, *this));
- if (author->HasAnimatedAvatar()) {
+ if (author->HasAnimatedAvatar(data.GuildID)) {
auto cb = [this](const Glib::RefPtr<Gdk::PixbufAnimation> &pb) {
m_anim_avatar = pb;
};
- img.LoadAnimationFromURL(author->GetAvatarURL("gif"), AvatarSize, AvatarSize, sigc::track_obj(cb, *this));
+ img.LoadAnimationFromURL(author->GetAvatarURL(data.GuildID, "gif"), AvatarSize, AvatarSize, sigc::track_obj(cb, *this));
}
get_style_context()->add_class("message-container");
diff --git a/src/discord/user.cpp b/src/discord/user.cpp
index fae212d..6df53aa 100644
--- a/src/discord/user.cpp
+++ b/src/discord/user.cpp
@@ -6,22 +6,41 @@ bool UserData::IsDeleted() const {
}
bool UserData::HasAvatar() const {
- return Avatar.size() > 0;
+ return !Avatar.empty();
}
-bool UserData::HasAnimatedAvatar() const {
- return Avatar.size() > 0 && Avatar[0] == 'a' && Avatar[1] == '_';
+bool UserData::HasAnimatedAvatar() const noexcept {
+ return !Avatar.empty() && Avatar[0] == 'a' && Avatar[1] == '_';
+}
+
+bool UserData::HasAnimatedAvatar(Snowflake guild_id) const {
+ const auto member = Abaddon::Get().GetDiscordClient().GetMember(ID, guild_id);
+ if (member.has_value() && member->Avatar.has_value() && member->Avatar.value()[0] == 'a' && member->Avatar.value()[1] == '_')
+ return true;
+ else if (!member->Avatar.has_value())
+ return HasAnimatedAvatar();
+ return false;
+}
+
+bool UserData::HasAnimatedAvatar(const std::optional<Snowflake> &guild_id) const {
+ if (guild_id.has_value())
+ return HasAnimatedAvatar(*guild_id);
+ else
+ return HasAnimatedAvatar();
}
std::string UserData::GetAvatarURL(Snowflake guild_id, std::string ext, std::string size) const {
const auto member = Abaddon::Get().GetDiscordClient().GetMember(ID, guild_id);
- if (member.has_value() && member->Avatar.has_value())
+ if (member.has_value() && member->Avatar.has_value()) {
+ if (ext == "gif" && !(member->Avatar.value()[0] == 'a' && member->Avatar.value()[1] == '_'))
+ return GetAvatarURL(ext, size);
return "https://cdn.discordapp.com/guilds/" +
std::to_string(guild_id) + "/users/" + std::to_string(ID) +
"/avatars/" + *member->Avatar + "." +
ext + "?" + "size=" + size;
- else
+ } else {
return GetAvatarURL(ext, size);
+ }
}
std::string UserData::GetAvatarURL(const std::optional<Snowflake> &guild_id, std::string ext, std::string size) const {
diff --git a/src/discord/user.hpp b/src/discord/user.hpp
index d4711fa..c058ea1 100644
--- a/src/discord/user.hpp
+++ b/src/discord/user.hpp
@@ -62,7 +62,9 @@ struct UserData {
bool IsDeleted() const;
bool HasAvatar() const;
- bool HasAnimatedAvatar() const;
+ bool HasAnimatedAvatar() const noexcept;
+ bool HasAnimatedAvatar(Snowflake guild_id) const;
+ bool HasAnimatedAvatar(const std::optional<Snowflake> &guild_id) const;
std::string GetAvatarURL(Snowflake guild_id, std::string ext = "png", std::string size = "32") const;
std::string GetAvatarURL(const std::optional<Snowflake> &guild_id, std::string ext = "png", std::string size = "32") const;
std::string GetAvatarURL(std::string ext = "png", std::string size = "32") const;