mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-19 20:11:59 +03:00
handle mute/unmute of channels (USER_GUILD_SETTINGS_UPDATE)
This commit is contained in:
@@ -174,6 +174,8 @@ ChannelList::ChannelList()
|
||||
discord.signal_removed_from_thread().connect(sigc::mem_fun(*this, &ChannelList::OnThreadRemoved));
|
||||
discord.signal_guild_update().connect(sigc::mem_fun(*this, &ChannelList::UpdateGuild));
|
||||
discord.signal_message_ack().connect(sigc::mem_fun(*this, &ChannelList::OnMessageAck));
|
||||
discord.signal_channel_muted().connect(sigc::mem_fun(*this, &ChannelList::OnChannelMute));
|
||||
discord.signal_channel_unmuted().connect(sigc::mem_fun(*this, &ChannelList::OnChannelUnmute));
|
||||
}
|
||||
|
||||
void ChannelList::UsePanedHack(Gtk::Paned &paned) {
|
||||
@@ -370,6 +372,16 @@ void ChannelList::DeleteThreadRow(Snowflake id) {
|
||||
m_model->erase(iter);
|
||||
}
|
||||
|
||||
void ChannelList::OnChannelMute(Snowflake id) {
|
||||
if (auto iter = GetIteratorForChannelFromID(id))
|
||||
m_model->row_changed(m_model->get_path(iter), iter);
|
||||
}
|
||||
|
||||
void ChannelList::OnChannelUnmute(Snowflake id) {
|
||||
if (auto iter = GetIteratorForChannelFromID(id))
|
||||
m_model->row_changed(m_model->get_path(iter), iter);
|
||||
}
|
||||
|
||||
// create a temporary channel row for non-joined threads
|
||||
// and delete them when the active channel switches off of them if still not joined
|
||||
void ChannelList::SetActiveChannel(Snowflake id) {
|
||||
|
||||
@@ -37,6 +37,8 @@ protected:
|
||||
void UpdateCreateChannel(const ChannelData &channel);
|
||||
void UpdateGuild(Snowflake id);
|
||||
void DeleteThreadRow(Snowflake id);
|
||||
void OnChannelMute(Snowflake id);
|
||||
void OnChannelUnmute(Snowflake id);
|
||||
|
||||
void OnThreadJoined(Snowflake id);
|
||||
void OnThreadRemoved(Snowflake id);
|
||||
|
||||
@@ -1342,6 +1342,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
|
||||
case GatewayEvent::MESSAGE_ACK: {
|
||||
HandleGatewayMessageAck(m);
|
||||
} break;
|
||||
case GatewayEvent::USER_GUILD_SETTINGS_UPDATE: {
|
||||
HandleGatewayUserGuildSettingsUpdate(m);
|
||||
} break;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
@@ -1845,6 +1848,31 @@ void DiscordClient::HandleGatewayMessageAck(const GatewayMessage &msg) {
|
||||
m_signal_message_ack.emit(data);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg) {
|
||||
UserGuildSettingsUpdateData data = msg.Data;
|
||||
const auto channels = GetChannelsInGuild(data.Settings.GuildID);
|
||||
std::set<Snowflake> now_muted_channels;
|
||||
for (const auto &override : data.Settings.ChannelOverrides) {
|
||||
if (override.Muted)
|
||||
now_muted_channels.insert(override.ChannelID);
|
||||
}
|
||||
for (const auto &channel_id : channels) {
|
||||
const bool was_muted = IsChannelMuted(channel_id);
|
||||
const bool now_muted = now_muted_channels.find(channel_id) != now_muted_channels.end();
|
||||
if (now_muted) {
|
||||
m_muted_channels.insert(channel_id);
|
||||
if (!was_muted) {
|
||||
m_signal_channel_muted.emit(channel_id);
|
||||
}
|
||||
} else {
|
||||
m_muted_channels.erase(channel_id);
|
||||
if (was_muted) {
|
||||
m_signal_channel_unmuted.emit(channel_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
|
||||
ReadySupplementalData data = msg.Data;
|
||||
for (const auto &p : data.MergedPresences.Friends) {
|
||||
@@ -2244,6 +2272,7 @@ void DiscordClient::LoadEventMap() {
|
||||
m_event_map["THREAD_UPDATE"] = GatewayEvent::THREAD_UPDATE;
|
||||
m_event_map["THREAD_MEMBER_LIST_UPDATE"] = GatewayEvent::THREAD_MEMBER_LIST_UPDATE;
|
||||
m_event_map["MESSAGE_ACK"] = GatewayEvent::MESSAGE_ACK;
|
||||
m_event_map["USER_GUILD_SETTINGS_UPDATE"] = GatewayEvent::USER_GUILD_SETTINGS_UPDATE;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
|
||||
@@ -2422,6 +2451,14 @@ DiscordClient::type_signal_message_sent DiscordClient::signal_message_sent() {
|
||||
return m_signal_message_sent;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_channel_muted DiscordClient::signal_channel_muted() {
|
||||
return m_signal_channel_muted;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_channel_unmuted DiscordClient::signal_channel_unmuted() {
|
||||
return m_signal_channel_unmuted;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_message_send_fail DiscordClient::signal_message_send_fail() {
|
||||
return m_signal_message_send_fail;
|
||||
}
|
||||
|
||||
@@ -251,6 +251,7 @@ private:
|
||||
void HandleGatewayThreadUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayThreadMemberListUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayMessageAck(const GatewayMessage &msg);
|
||||
void HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayReadySupplemental(const GatewayMessage &msg);
|
||||
void HandleGatewayReconnect(const GatewayMessage &msg);
|
||||
void HandleGatewayInvalidSession(const GatewayMessage &msg);
|
||||
@@ -365,6 +366,8 @@ public:
|
||||
typedef sigc::signal<void, Message> type_signal_message_unpinned;
|
||||
typedef sigc::signal<void, Message> type_signal_message_pinned;
|
||||
typedef sigc::signal<void, Message> type_signal_message_sent;
|
||||
typedef sigc::signal<void, Snowflake> type_signal_channel_muted;
|
||||
typedef sigc::signal<void, Snowflake> type_signal_channel_unmuted;
|
||||
|
||||
typedef sigc::signal<void, std::string /* nonce */, float /* retry_after */> type_signal_message_send_fail; // retry after param will be 0 if it failed for a reason that isnt slowmode
|
||||
typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting
|
||||
@@ -413,6 +416,8 @@ public:
|
||||
type_signal_added_to_thread signal_added_to_thread();
|
||||
type_signal_removed_from_thread signal_removed_from_thread();
|
||||
type_signal_message_sent signal_message_sent();
|
||||
type_signal_channel_muted signal_channel_muted();
|
||||
type_signal_channel_unmuted signal_channel_unmuted();
|
||||
type_signal_message_send_fail signal_message_send_fail();
|
||||
type_signal_disconnected signal_disconnected();
|
||||
type_signal_connected signal_connected();
|
||||
@@ -461,6 +466,8 @@ protected:
|
||||
type_signal_removed_from_thread m_signal_removed_from_thread;
|
||||
type_signal_added_to_thread m_signal_added_to_thread;
|
||||
type_signal_message_sent m_signal_message_sent;
|
||||
type_signal_channel_muted m_signal_channel_muted;
|
||||
type_signal_channel_unmuted m_signal_channel_unmuted;
|
||||
type_signal_message_send_fail m_signal_message_send_fail;
|
||||
type_signal_disconnected m_signal_disconnected;
|
||||
type_signal_connected m_signal_connected;
|
||||
|
||||
@@ -586,3 +586,7 @@ void from_json(const nlohmann::json &j, MessageAckData &m) {
|
||||
void to_json(nlohmann::json &j, const AckBulkData &m) {
|
||||
j["read_states"] = m.ReadStates;
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, UserGuildSettingsUpdateData &m) {
|
||||
m.Settings = j;
|
||||
}
|
||||
|
||||
@@ -79,6 +79,7 @@ enum class GatewayEvent : int {
|
||||
THREAD_MEMBERS_UPDATE,
|
||||
THREAD_MEMBER_LIST_UPDATE,
|
||||
MESSAGE_ACK,
|
||||
USER_GUILD_SETTINGS_UPDATE,
|
||||
};
|
||||
|
||||
enum class GatewayCloseCode : uint16_t {
|
||||
@@ -813,3 +814,9 @@ struct AckBulkData {
|
||||
|
||||
friend void to_json(nlohmann::json &j, const AckBulkData &m);
|
||||
};
|
||||
|
||||
struct UserGuildSettingsUpdateData {
|
||||
UserGuildSettingsEntry Settings;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, UserGuildSettingsUpdateData &m);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user