unread indicators for classic guilds

This commit is contained in:
ouwou
2024-02-19 20:27:03 -05:00
parent 473ff6f777
commit 3badc04db5
3 changed files with 44 additions and 0 deletions

View File

@@ -160,3 +160,22 @@
.channel-list .view:selected {
background-color: @theme_selected_bg_color;
}
.classic-guild-list > row {
padding-left: 0px;
box-shadow: none;
border: none;
outline: none;
}
.classic-guild-list > row:hover {
background: none;
}
.classic-guild-list-guild.has-unread {
background: radial-gradient(7px circle at left, @theme_selected_bg_color 50%, transparent 20%);
}
.classic-guild-list-guild box, .classic-guild-list-folder stack {
padding-left: 10px;
}

View File

@@ -15,6 +15,9 @@ GuildListGuildItem::GuildListGuildItem(const GuildData &guild)
set_tooltip_text(guild.Name);
UpdateIcon();
Abaddon::Get().GetDiscordClient().signal_message_create().connect(sigc::mem_fun(*this, &GuildListGuildItem::OnMessageCreate));
Abaddon::Get().GetDiscordClient().signal_message_ack().connect(sigc::mem_fun(*this, &GuildListGuildItem::OnMessageAck));
}
void GuildListGuildItem::UpdateIcon() {
@@ -26,3 +29,22 @@ void GuildListGuildItem::UpdateIcon() {
void GuildListGuildItem::OnIconFetched(const Glib::RefPtr<Gdk::Pixbuf> &pb) {
m_image.property_pixbuf() = pb->scale_simple(48, 48, Gdk::INTERP_BILINEAR);
}
void GuildListGuildItem::OnMessageCreate(const Message &msg) {
if (msg.GuildID.has_value() && *msg.GuildID == ID) CheckUnreadStatus();
}
void GuildListGuildItem::OnMessageAck(const MessageAckData &data) {
CheckUnreadStatus();
}
void GuildListGuildItem::CheckUnreadStatus() {
auto &discord = Abaddon::Get().GetDiscordClient();
if (!Abaddon::Get().GetSettings().Unreads) return;
int mentions;
if (!discord.IsGuildMuted(ID) && discord.GetUnreadStateForGuild(ID, mentions)) {
get_style_context()->add_class("has-unread");
} else {
get_style_context()->remove_class("has-unread");
}
}

View File

@@ -13,6 +13,9 @@ public:
private:
void UpdateIcon();
void OnIconFetched(const Glib::RefPtr<Gdk::Pixbuf> &pb);
void OnMessageCreate(const Message &msg);
void OnMessageAck(const MessageAckData &data);
void CheckUnreadStatus();
Gtk::Box m_box;
Gtk::Image m_image;