forked from OpenGamers/abaddon
hide guild unread indicator for muted guilds
This commit is contained in:
@@ -55,13 +55,15 @@ void UnreadRenderer::RenderUnreadOnGuild(Snowflake id, Gtk::Widget &widget, cons
|
||||
}
|
||||
if (!has_unread) return;
|
||||
|
||||
cr->set_source_rgb(1.0, 1.0, 1.0);
|
||||
const auto x = background_area.get_x();
|
||||
const auto y = background_area.get_y();
|
||||
const auto w = background_area.get_width();
|
||||
const auto h = background_area.get_height();
|
||||
cr->rectangle(x, y + h / 2 - 24 / 2, 3, 24);
|
||||
cr->fill();
|
||||
if (!discord.IsGuildMuted(id)) {
|
||||
cr->set_source_rgb(1.0, 1.0, 1.0);
|
||||
const auto x = background_area.get_x();
|
||||
const auto y = background_area.get_y();
|
||||
const auto w = background_area.get_width();
|
||||
const auto h = background_area.get_height();
|
||||
cr->rectangle(x, y + h / 2 - 24 / 2, 3, 24);
|
||||
cr->fill();
|
||||
}
|
||||
|
||||
if (total_mentions < 1) return;
|
||||
auto *paned = static_cast<Gtk::Paned *>(widget.get_ancestor(Gtk::Paned::get_type()));
|
||||
|
||||
@@ -1095,6 +1095,10 @@ void DiscordClient::SetUserAgent(std::string agent) {
|
||||
m_websocket.SetUserAgent(agent);
|
||||
}
|
||||
|
||||
bool DiscordClient::IsGuildMuted(Snowflake id) const noexcept {
|
||||
return m_muted_guilds.find(id) != m_muted_guilds.end();
|
||||
}
|
||||
|
||||
int DiscordClient::GetUnreadStateForChannel(Snowflake id) const noexcept {
|
||||
const auto iter = m_unread.find(id);
|
||||
if (iter == m_unread.end()) return -1; // todo: no magic number
|
||||
@@ -1457,6 +1461,7 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) {
|
||||
m_user_settings = data.Settings;
|
||||
|
||||
HandleReadyReadState(data);
|
||||
HandleReadyGuildSettings(data);
|
||||
|
||||
m_signal_gateway_ready.emit();
|
||||
}
|
||||
@@ -2181,6 +2186,13 @@ void DiscordClient::HandleReadyReadState(const ReadyEventData &data) {
|
||||
}
|
||||
}
|
||||
|
||||
void DiscordClient::HandleReadyGuildSettings(const ReadyEventData &data) {
|
||||
for (const auto &entry : data.GuildSettings.Entries) {
|
||||
if (entry.Muted)
|
||||
m_muted_guilds.insert(entry.GuildID);
|
||||
}
|
||||
}
|
||||
|
||||
void DiscordClient::LoadEventMap() {
|
||||
m_event_map["READY"] = GatewayEvent::READY;
|
||||
m_event_map["MESSAGE_CREATE"] = GatewayEvent::MESSAGE_CREATE;
|
||||
|
||||
@@ -184,6 +184,7 @@ public:
|
||||
void UpdateToken(std::string token);
|
||||
void SetUserAgent(std::string agent);
|
||||
|
||||
bool IsGuildMuted(Snowflake id) const noexcept;
|
||||
int GetUnreadStateForChannel(Snowflake id) const noexcept;
|
||||
|
||||
PresenceStatus GetUserStatus(Snowflake id) const;
|
||||
@@ -265,6 +266,7 @@ private:
|
||||
void StoreMessageData(Message &msg);
|
||||
|
||||
void HandleReadyReadState(const ReadyEventData &data);
|
||||
void HandleReadyGuildSettings(const ReadyEventData &data);
|
||||
|
||||
std::string m_token;
|
||||
|
||||
@@ -277,6 +279,7 @@ private:
|
||||
std::set<Snowflake> m_joined_threads;
|
||||
std::map<Snowflake, std::vector<Snowflake>> m_thread_members;
|
||||
std::map<Snowflake, Snowflake> m_last_message_id;
|
||||
std::unordered_set<Snowflake> m_muted_guilds;
|
||||
std::unordered_map<Snowflake, int> m_unread;
|
||||
|
||||
UserData m_user_data;
|
||||
|
||||
@@ -136,6 +136,31 @@ void from_json(const nlohmann::json &j, ReadStateData &m) {
|
||||
JS_ON("entries", m.Entries);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, UserGuildSettingsChannelOverride &m) {
|
||||
JS_D("muted", m.Muted);
|
||||
JS_D("message_notifications", m.MessageNotifications);
|
||||
JS_D("collapsed", m.Collapsed);
|
||||
JS_D("channel_id", m.ChannelID);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, UserGuildSettingsEntry &m) {
|
||||
JS_D("version", m.Version);
|
||||
JS_D("suppress_roles", m.SuppressRoles);
|
||||
JS_D("suppress_everyone", m.SuppressEveryone);
|
||||
JS_D("muted", m.Muted);
|
||||
JS_D("mobile_push", m.MobilePush);
|
||||
JS_D("message_notifications", m.MessageNotifications);
|
||||
JS_D("hide_muted_channels", m.HideMutedChannels);
|
||||
JS_D("guild_id", m.GuildID);
|
||||
JS_D("channel_overrides", m.ChannelOverrides);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, UserGuildSettingsData &m) {
|
||||
JS_D("version", m.Version);
|
||||
JS_D("partial", m.IsParital);
|
||||
JS_D("entries", m.Entries);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, ReadyEventData &m) {
|
||||
JS_D("v", m.GatewayVersion);
|
||||
JS_D("user", m.SelfUser);
|
||||
@@ -150,6 +175,7 @@ void from_json(const nlohmann::json &j, ReadyEventData &m) {
|
||||
JS_O("relationships", m.Relationships);
|
||||
JS_O("guild_join_requests", m.GuildJoinRequests);
|
||||
JS_O("read_state", m.ReadState);
|
||||
JS_D("user_guild_settings", m.GuildSettings);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, MergedPresence &m) {
|
||||
|
||||
@@ -243,6 +243,39 @@ struct ReadStateData {
|
||||
friend void from_json(const nlohmann::json &j, ReadStateData &m);
|
||||
};
|
||||
|
||||
struct UserGuildSettingsChannelOverride {
|
||||
bool Muted;
|
||||
// MuteConfig
|
||||
int MessageNotifications;
|
||||
bool Collapsed;
|
||||
Snowflake ChannelID;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, UserGuildSettingsChannelOverride &m);
|
||||
};
|
||||
|
||||
struct UserGuildSettingsEntry {
|
||||
int Version;
|
||||
bool SuppressRoles;
|
||||
bool SuppressEveryone;
|
||||
bool Muted;
|
||||
// MuteConfig
|
||||
bool MobilePush;
|
||||
int MessageNotifications;
|
||||
bool HideMutedChannels;
|
||||
Snowflake GuildID;
|
||||
std::vector<UserGuildSettingsChannelOverride> ChannelOverrides;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, UserGuildSettingsEntry &m);
|
||||
};
|
||||
|
||||
struct UserGuildSettingsData {
|
||||
int Version;
|
||||
bool IsParital;
|
||||
std::vector<UserGuildSettingsEntry> Entries;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, UserGuildSettingsData &m);
|
||||
};
|
||||
|
||||
struct ReadyEventData {
|
||||
int GatewayVersion;
|
||||
UserData SelfUser;
|
||||
@@ -259,6 +292,7 @@ struct ReadyEventData {
|
||||
std::optional<std::vector<RelationshipData>> Relationships;
|
||||
std::optional<std::vector<GuildApplicationData>> GuildJoinRequests;
|
||||
ReadStateData ReadState;
|
||||
UserGuildSettingsData GuildSettings;
|
||||
// std::vector<Unknown> ConnectedAccounts; // opt
|
||||
// std::map<std::string, Unknown> Consents; // opt
|
||||
// std::vector<Unknown> Experiments; // opt
|
||||
|
||||
Reference in New Issue
Block a user