summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/channeltabswitcherhandy.cpp27
-rw-r--r--src/discord/channel.cpp10
2 files changed, 26 insertions, 11 deletions
diff --git a/src/components/channeltabswitcherhandy.cpp b/src/components/channeltabswitcherhandy.cpp
index 7488d6f..14cf9d9 100644
--- a/src/components/channeltabswitcherhandy.cpp
+++ b/src/components/channeltabswitcherhandy.cpp
@@ -164,19 +164,26 @@ void ChannelTabSwitcherHandy::OnPageIconLoad(HdyTabPage *page, const Glib::RefPt
}
void ChannelTabSwitcherHandy::CheckPageIcon(HdyTabPage *page, const ChannelData &data) {
+ std::optional<std::string> icon_url;
+
if (data.GuildID.has_value()) {
if (const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(*data.GuildID); guild.has_value() && guild->HasIcon()) {
- auto *child_widget = hdy_tab_page_get_child(page);
- if (child_widget == nullptr) return; // probably wont happen :---)
- // i think this works???
- auto *trackable = Glib::wrap(GTK_WIDGET(child_widget));
-
- Abaddon::Get().GetImageManager().LoadFromURL(
- guild->GetIconURL("png", "16"),
- sigc::track_obj([this, page](const Glib::RefPtr<Gdk::Pixbuf> &pb) { OnPageIconLoad(page, pb); },
- *trackable));
- return;
+ icon_url = guild->GetIconURL("png", "16");
}
+ } else if (data.IsDM()) {
+ icon_url = data.GetIconURL();
+ }
+
+ if (icon_url.has_value()) {
+ auto *child_widget = hdy_tab_page_get_child(page);
+ if (child_widget == nullptr) return; // probably wont happen :---)
+ // i think this works???
+ auto *trackable = Glib::wrap(GTK_WIDGET(child_widget));
+ Abaddon::Get().GetImageManager().LoadFromURL(
+ *icon_url,
+ sigc::track_obj([this, page](const Glib::RefPtr<Gdk::Pixbuf> &pb) { OnPageIconLoad(page, pb); },
+ *trackable));
+
return;
}
diff --git a/src/discord/channel.cpp b/src/discord/channel.cpp
index 6277341..498b2e5 100644
--- a/src/discord/channel.cpp
+++ b/src/discord/channel.cpp
@@ -89,7 +89,15 @@ bool ChannelData::HasIcon() const noexcept {
}
std::string ChannelData::GetIconURL() const {
- return "https://cdn.discordapp.com/channel-icons/" + std::to_string(ID) + "/" + *Icon + ".png";
+ if (HasIcon()) {
+ return "https://cdn.discordapp.com/channel-icons/" + std::to_string(ID) + "/" + *Icon + ".png";
+ } else {
+ const auto recipients = GetDMRecipients();
+ if (!recipients.empty())
+ return recipients[0].GetAvatarURL("png", "32");
+ else
+ return "https://cdn.discordapp.com/embed/avatars/0.png";
+ }
}
std::string ChannelData::GetDisplayName() const {