summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-07-28 03:34:36 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2021-07-28 03:34:36 -0400
commit014e176e0a7cf457a03278dbdf8495400981b8b2 (patch)
treeaf04057a3ed6ca7da1f646a8b7a6440425ec5d94 /components
parent9d2d13a3898f05f9e8189f99087198726d476e1b (diff)
downloadabaddon-portaudio-014e176e0a7cf457a03278dbdf8495400981b8b2.tar.gz
abaddon-portaudio-014e176e0a7cf457a03278dbdf8495400981b8b2.zip
handle THREAD_CREATE
also fix compilation also change channel_create signal to emit ChannelData
Diffstat (limited to 'components')
-rw-r--r--components/channels.cpp56
-rw-r--r--components/channels.hpp4
2 files changed, 37 insertions, 23 deletions
diff --git a/components/channels.cpp b/components/channels.cpp
index 956fee1..a80cfd8 100644
--- a/components/channels.cpp
+++ b/components/channels.cpp
@@ -128,6 +128,7 @@ ChannelList::ChannelList()
discord.signal_channel_delete().connect(sigc::mem_fun(*this, &ChannelList::UpdateRemoveChannel));
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_guild_update().connect(sigc::mem_fun(*this, &ChannelList::UpdateGuild));
}
@@ -211,32 +212,31 @@ void ChannelList::UpdateChannel(Snowflake id) {
channel_row[m_columns.m_sort] = *channel->Position;
}
-void ChannelList::UpdateCreateChannel(Snowflake id) {
- const auto channel = Abaddon::Get().GetDiscordClient().GetChannel(id);
- if (!channel.has_value()) return;
- if (channel->Type == ChannelType::GUILD_CATEGORY) return (void)UpdateCreateChannelCategory(*channel);
- if (channel->Type == ChannelType::DM || channel->Type == ChannelType::GROUP_DM) return UpdateCreateDMChannel(*channel);
- if (channel->Type != ChannelType::GUILD_TEXT && channel->Type != ChannelType::GUILD_NEWS) return;
+void ChannelList::UpdateCreateChannel(const ChannelData &channel) {
+ ;
+ if (channel.Type == ChannelType::GUILD_CATEGORY) return (void)UpdateCreateChannelCategory(channel);
+ if (channel.Type == ChannelType::DM || channel.Type == ChannelType::GROUP_DM) return UpdateCreateDMChannel(channel);
+ if (channel.Type != ChannelType::GUILD_TEXT && channel.Type != ChannelType::GUILD_NEWS) return;
Gtk::TreeRow channel_row;
bool orphan;
- if (channel->ParentID.has_value()) {
+ if (channel.ParentID.has_value()) {
orphan = false;
- auto iter = GetIteratorForChannelFromID(*channel->ParentID);
+ auto iter = GetIteratorForChannelFromID(*channel.ParentID);
channel_row = *m_model->append(iter->children());
} else {
orphan = true;
- auto iter = GetIteratorForGuildFromID(*channel->GuildID);
+ auto iter = GetIteratorForGuildFromID(*channel.GuildID);
channel_row = *m_model->append(iter->children());
}
channel_row[m_columns.m_type] = RenderType::TextChannel;
- channel_row[m_columns.m_id] = channel->ID;
- channel_row[m_columns.m_name] = "#" + Glib::Markup::escape_text(*channel->Name);
- channel_row[m_columns.m_nsfw] = channel->NSFW();
+ channel_row[m_columns.m_id] = channel.ID;
+ channel_row[m_columns.m_name] = "#" + Glib::Markup::escape_text(*channel.Name);
+ channel_row[m_columns.m_nsfw] = channel.NSFW();
if (orphan)
- channel_row[m_columns.m_sort] = *channel->Position + OrphanChannelSortOffset;
+ channel_row[m_columns.m_sort] = *channel.Position + OrphanChannelSortOffset;
else
- channel_row[m_columns.m_sort] = *channel->Position;
+ channel_row[m_columns.m_sort] = *channel.Position;
}
void ChannelList::UpdateGuild(Snowflake id) {
@@ -265,6 +265,12 @@ void ChannelList::UpdateGuild(Snowflake id) {
}
}
+void ChannelList::UpdateCreateThread(const ChannelData &channel) {
+ auto parent_row = GetIteratorForChannelFromID(*channel.ParentID);
+ if (parent_row)
+ CreateThreadRow(parent_row->children(), channel);
+}
+
void ChannelList::SetActiveChannel(Snowflake id) {
const auto channel_iter = GetIteratorForChannelFromID(id);
if (channel_iter) {
@@ -330,14 +336,8 @@ Gtk::TreeModel::iterator ChannelList::AddGuild(const GuildData &guild) {
const auto it = threads.find(channel.ID);
if (it == threads.end()) return;
- for (const auto &thread : it->second) {
- auto thread_row = *m_model->append(row.children());
- thread_row[m_columns.m_type] = RenderType::Thread;
- thread_row[m_columns.m_id] = thread.ID;
- thread_row[m_columns.m_name] = "- " + Glib::Markup::escape_text(*thread.Name);
- thread_row[m_columns.m_sort] = thread.ID;
- thread_row[m_columns.m_nsfw] = false;
- }
+ for (const auto &thread : it->second)
+ CreateThreadRow(row.children(), thread);
};
for (const auto &channel : orphan_channels) {
@@ -389,6 +389,18 @@ Gtk::TreeModel::iterator ChannelList::UpdateCreateChannelCategory(const ChannelD
return cat_row;
}
+Gtk::TreeModel::iterator ChannelList::CreateThreadRow(const Gtk::TreeNodeChildren &children, const ChannelData &channel) {
+ auto thread_iter = m_model->append(children);
+ auto thread_row = *thread_iter;
+ thread_row[m_columns.m_type] = RenderType::Thread;
+ thread_row[m_columns.m_id] = channel.ID;
+ thread_row[m_columns.m_name] = "- " + Glib::Markup::escape_text(*channel.Name);
+ thread_row[m_columns.m_sort] = channel.ID;
+ thread_row[m_columns.m_nsfw] = false;
+
+ return thread_iter;
+}
+
void ChannelList::UpdateChannelCategory(const ChannelData &channel) {
auto iter = GetIteratorForChannelFromID(channel.ID);
if (!iter) return;
diff --git a/components/channels.hpp b/components/channels.hpp
index 3b81cab..bdc3e84 100644
--- a/components/channels.hpp
+++ b/components/channels.hpp
@@ -139,7 +139,8 @@ protected:
void UpdateRemoveGuild(Snowflake id);
void UpdateRemoveChannel(Snowflake id);
void UpdateChannel(Snowflake id);
- void UpdateCreateChannel(Snowflake id);
+ void UpdateCreateChannel(const ChannelData &channel);
+ void UpdateCreateThread(const ChannelData &channel);
void UpdateGuild(Snowflake id);
Gtk::TreeView m_view;
@@ -168,6 +169,7 @@ protected:
Gtk::TreeModel::iterator AddGuild(const GuildData &guild);
Gtk::TreeModel::iterator UpdateCreateChannelCategory(const ChannelData &channel);
+ Gtk::TreeModel::iterator CreateThreadRow(const Gtk::TreeNodeChildren &children, const ChannelData &channel);
void UpdateChannelCategory(const ChannelData &channel);