summaryrefslogtreecommitdiff
path: root/src/components/channels.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-03-26 02:58:59 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-03-26 02:58:59 -0400
commita0b3c9f8a4f8d2c39258d4c142f8604423576d91 (patch)
tree841155a65b439b61a5c58c1f64878152c20d4f51 /src/components/channels.cpp
parent481685b3bbb2b0270870dec5de87e60fc2d84d15 (diff)
parenta2a45757e917aa97e71cf0b84a01dc843759a5f6 (diff)
downloadabaddon-portaudio-a0b3c9f8a4f8d2c39258d4c142f8604423576d91.tar.gz
abaddon-portaudio-a0b3c9f8a4f8d2c39258d4c142f8604423576d91.zip
Merge branch 'master' into msys
Diffstat (limited to 'src/components/channels.cpp')
-rw-r--r--src/components/channels.cpp55
1 files changed, 51 insertions, 4 deletions
diff --git a/src/components/channels.cpp b/src/components/channels.cpp
index 28eb288..99bd07b 100644
--- a/src/components/channels.cpp
+++ b/src/components/channels.cpp
@@ -22,7 +22,8 @@ ChannelList::ChannelList()
, m_menu_thread_copy_id("_Copy ID", true)
, m_menu_thread_leave("_Leave", true)
, m_menu_thread_archive("_Archive", true)
- , m_menu_thread_unarchive("_Unarchive", true) {
+ , m_menu_thread_unarchive("_Unarchive", true)
+ , m_menu_thread_mark_as_read("Mark as _Read", true) {
get_style_context()->add_class("channel-list");
// todo: move to method
@@ -161,6 +162,15 @@ ChannelList::ChannelList()
else if (Abaddon::Get().ShowConfirm("Are you sure you want to leave this group DM?"))
Abaddon::Get().GetDiscordClient().CloseDM(id);
});
+ m_menu_dm_toggle_mute.signal_activate().connect([this] {
+ const auto id = static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]);
+ auto &discord = Abaddon::Get().GetDiscordClient();
+ if (discord.IsChannelMuted(id))
+ discord.UnmuteChannel(id, NOOP_CALLBACK);
+ else
+ discord.MuteChannel(id, NOOP_CALLBACK);
+ });
+ m_menu_dm.append(m_menu_dm_toggle_mute);
m_menu_dm.append(m_menu_dm_close);
m_menu_dm.append(m_menu_dm_copy_id);
m_menu_dm.show_all();
@@ -178,15 +188,29 @@ ChannelList::ChannelList()
m_menu_thread_unarchive.signal_activate().connect([this] {
Abaddon::Get().GetDiscordClient().UnArchiveThread(static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), [](...) {});
});
- m_menu_thread.append(m_menu_thread_copy_id);
+ m_menu_thread_mark_as_read.signal_activate().connect([this] {
+ Abaddon::Get().GetDiscordClient().MarkChannelAsRead(static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), NOOP_CALLBACK);
+ });
+ m_menu_thread_toggle_mute.signal_activate().connect([this] {
+ const auto id = static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]);
+ auto &discord = Abaddon::Get().GetDiscordClient();
+ if (discord.IsChannelMuted(id))
+ discord.UnmuteThread(id, NOOP_CALLBACK);
+ else
+ discord.MuteThread(id, NOOP_CALLBACK);
+ });
+ m_menu_thread.append(m_menu_thread_mark_as_read);
+ m_menu_thread.append(m_menu_thread_toggle_mute);
m_menu_thread.append(m_menu_thread_leave);
m_menu_thread.append(m_menu_thread_archive);
m_menu_thread.append(m_menu_thread_unarchive);
+ m_menu_thread.append(m_menu_thread_copy_id);
m_menu_thread.show_all();
m_menu_guild.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnGuildSubmenuPopup));
m_menu_category.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnCategorySubmenuPopup));
m_menu_channel.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnChannelSubmenuPopup));
+ m_menu_dm.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnDMSubmenuPopup));
m_menu_thread.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnThreadSubmenuPopup));
auto &discord = Abaddon::Get().GetDiscordClient();
@@ -728,7 +752,13 @@ void ChannelList::AddPrivateChannels() {
else if (dm->Type == ChannelType::GROUP_DM)
row[m_columns.m_name] = std::to_string(recipients.size()) + " members";
- if (top_recipient.has_value()) {
+ if (dm->HasIcon()) {
+ const auto cb = [this, iter](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
+ if (iter)
+ (*iter)[m_columns.m_icon] = pb->scale_simple(DMIconSize, DMIconSize, Gdk::INTERP_BILINEAR);
+ };
+ img.LoadFromURL(dm->GetIconURL(), sigc::track_obj(cb, *this));
+ } else if (top_recipient.has_value()) {
const auto cb = [this, iter](const Glib::RefPtr<Gdk::Pixbuf> &pb) {
if (iter)
(*iter)[m_columns.m_icon] = pb->scale_simple(DMIconSize, DMIconSize, Gdk::INTERP_BILINEAR);
@@ -887,6 +917,16 @@ void ChannelList::OnChannelSubmenuPopup(const Gdk::Rectangle *flipped_rect, cons
m_menu_channel_toggle_mute.set_label("Mute");
}
+void ChannelList::OnDMSubmenuPopup(const Gdk::Rectangle *flipped_rect, const Gdk::Rectangle *final_rect, bool flipped_x, bool flipped_y) {
+ auto iter = m_model->get_iter(m_path_for_menu);
+ if (!iter) return;
+ const auto id = static_cast<Snowflake>((*iter)[m_columns.m_id]);
+ if (Abaddon::Get().GetDiscordClient().IsChannelMuted(id))
+ m_menu_dm_toggle_mute.set_label("Unmute");
+ else
+ m_menu_dm_toggle_mute.set_label("Mute");
+}
+
void ChannelList::OnThreadSubmenuPopup(const Gdk::Rectangle *flipped_rect, const Gdk::Rectangle *final_rect, bool flipped_x, bool flipped_y) {
m_menu_thread_archive.set_visible(false);
m_menu_thread_unarchive.set_visible(false);
@@ -894,7 +934,14 @@ void ChannelList::OnThreadSubmenuPopup(const Gdk::Rectangle *flipped_rect, const
auto &discord = Abaddon::Get().GetDiscordClient();
auto iter = m_model->get_iter(m_path_for_menu);
if (!iter) return;
- auto channel = discord.GetChannel(static_cast<Snowflake>((*iter)[m_columns.m_id]));
+ const auto id = static_cast<Snowflake>((*iter)[m_columns.m_id]);
+
+ if (discord.IsChannelMuted(id))
+ m_menu_thread_toggle_mute.set_label("Unmute");
+ else
+ m_menu_thread_toggle_mute.set_label("Mute");
+
+ auto channel = discord.GetChannel(id);
if (!channel.has_value() || !channel->ThreadMetadata.has_value()) return;
if (!discord.HasGuildPermission(discord.GetUserData().ID, *channel->GuildID, Permission::MANAGE_THREADS)) return;