From a19d21427206bcd5ab5cc0af273a05f3fe827720 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Mon, 2 Aug 2021 02:00:03 -0400 Subject: basic THREAD_MEMBERS_UPDATE handling for updating channel list --- components/channels.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'components/channels.cpp') diff --git a/components/channels.cpp b/components/channels.cpp index ed5de62..644e090 100644 --- a/components/channels.cpp +++ b/components/channels.cpp @@ -142,7 +142,8 @@ ChannelList::ChannelList() discord.signal_channel_update().connect(sigc::mem_fun(*this, &ChannelList::UpdateChannel)); discord.signal_channel_create().connect(sigc::mem_fun(*this, &ChannelList::UpdateCreateChannel)); discord.signal_thread_create().connect(sigc::mem_fun(*this, &ChannelList::UpdateCreateThread)); - discord.signal_thread_delete().connect(sigc::mem_fun(*this, &ChannelList::UpdateDeleteThread)); + discord.signal_thread_delete().connect(sigc::mem_fun(*this, &ChannelList::OnThreadDelete)); + discord.signal_thread_members_update().connect(sigc::mem_fun(*this, &ChannelList::OnThreadMembersUpdate)); discord.signal_guild_update().connect(sigc::mem_fun(*this, &ChannelList::UpdateGuild)); } @@ -279,14 +280,25 @@ void ChannelList::UpdateGuild(Snowflake id) { } } +void ChannelList::OnThreadDelete(const ThreadDeleteData &data) { + UpdateDeleteThread(data.ID); +} + +void ChannelList::OnThreadMembersUpdate(const ThreadMembersUpdateData &data) { + auto &r = data.RemovedMemberIDs; + if (r.has_value() && std::find(r->begin(), r->end(), Abaddon::Get().GetDiscordClient().GetUserData().ID) != r->end()) { + UpdateDeleteThread(data.ID); + } +} + void ChannelList::UpdateCreateThread(const ChannelData &channel) { auto parent_row = GetIteratorForChannelFromID(*channel.ParentID); if (parent_row) CreateThreadRow(parent_row->children(), channel); } -void ChannelList::UpdateDeleteThread(const ThreadDeleteData &data) { - auto iter = GetIteratorForChannelFromID(data.ID); +void ChannelList::UpdateDeleteThread(Snowflake id) { + auto iter = GetIteratorForChannelFromID(id); if (iter) m_model->erase(iter); } -- cgit v1.2.3