summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-07-04 01:39:56 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2021-07-04 01:39:56 -0400
commitd0d5c655fc8c09915dc52164c18ff066d6355f0c (patch)
tree6ecdbd85205c95dc0dcbcb909305a825235d50a3 /components
parent716627f47d06907759bab22cc063d0b891e1e082 (diff)
downloadabaddon-portaudio-d0d5c655fc8c09915dc52164c18ff066d6355f0c.tar.gz
abaddon-portaudio-d0d5c655fc8c09915dc52164c18ff066d6355f0c.zip
handle channel create
Diffstat (limited to 'components')
-rw-r--r--components/channels.cpp36
-rw-r--r--components/channels.hpp2
2 files changed, 38 insertions, 0 deletions
diff --git a/components/channels.cpp b/components/channels.cpp
index 1c36ab9..0668318 100644
--- a/components/channels.cpp
+++ b/components/channels.cpp
@@ -115,6 +115,29 @@ void ChannelList::UpdateCreateDMChannel(Snowflake id) {
}
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::GUILD_TEXT && channel->Type != ChannelType::GUILD_NEWS) return;
+
+ Gtk::TreeRow channel_row;
+ bool orphan;
+ if (channel->ParentID.has_value()) {
+ orphan = false;
+ auto iter = GetIteratorForChannelFromID(*channel->ParentID);
+ channel_row = *m_model->append(iter->children());
+ } else {
+ orphan = true;
+ 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);
+ if (orphan)
+ channel_row[m_columns.m_sort] = *channel->Position - 100;
+ else
+ channel_row[m_columns.m_sort] = *channel->Position;
}
void ChannelList::UpdateGuild(Snowflake id) {
@@ -188,6 +211,19 @@ Gtk::TreeModel::iterator ChannelList::AddGuild(const GuildData &guild) {
return guild_row;
}
+Gtk::TreeModel::iterator ChannelList::UpdateCreateChannelCategory(const ChannelData &channel) {
+ const auto iter = GetIteratorForGuildFromID(*channel.GuildID);
+ if (!iter) return {};
+
+ auto cat_row = *m_model->append(iter->children());
+ cat_row[m_columns.m_type] = RenderType::Category;
+ cat_row[m_columns.m_id] = channel.ID;
+ cat_row[m_columns.m_name] = Glib::Markup::escape_text(*channel.Name);
+ cat_row[m_columns.m_sort] = *channel.Position;
+
+ return cat_row;
+}
+
Gtk::TreeModel::iterator ChannelList::GetIteratorForGuildFromID(Snowflake id) {
for (const auto child : m_model->children()) {
if (child[m_columns.m_id] == id)
diff --git a/components/channels.hpp b/components/channels.hpp
index bbe0369..529cb85 100644
--- a/components/channels.hpp
+++ b/components/channels.hpp
@@ -120,6 +120,8 @@ protected:
Glib::RefPtr<Gtk::TreeStore> m_model;
Gtk::TreeModel::iterator AddGuild(const GuildData &guild);
+ Gtk::TreeModel::iterator UpdateCreateChannelCategory(const ChannelData &channel);
+
Gtk::TreeModel::iterator GetIteratorForGuildFromID(Snowflake id);
Gtk::TreeModel::iterator GetIteratorForChannelFromID(Snowflake id);