diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-07-04 01:39:56 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-07-04 01:39:56 -0400 |
commit | d0d5c655fc8c09915dc52164c18ff066d6355f0c (patch) | |
tree | 6ecdbd85205c95dc0dcbcb909305a825235d50a3 /components | |
parent | 716627f47d06907759bab22cc063d0b891e1e082 (diff) | |
download | abaddon-portaudio-d0d5c655fc8c09915dc52164c18ff066d6355f0c.tar.gz abaddon-portaudio-d0d5c655fc8c09915dc52164c18ff066d6355f0c.zip |
handle channel create
Diffstat (limited to 'components')
-rw-r--r-- | components/channels.cpp | 36 | ||||
-rw-r--r-- | components/channels.hpp | 2 |
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); |