forked from OpenGamers/abaddon
archive/unarchive from channel list
This commit is contained in:
@@ -19,7 +19,9 @@ ChannelList::ChannelList()
|
|||||||
, m_menu_dm_close("") // changes depending on if group or not
|
, m_menu_dm_close("") // changes depending on if group or not
|
||||||
, m_menu_dm_copy_id("_Copy ID", true)
|
, m_menu_dm_copy_id("_Copy ID", true)
|
||||||
, m_menu_thread_copy_id("_Copy ID", true)
|
, m_menu_thread_copy_id("_Copy ID", true)
|
||||||
, m_menu_thread_leave("_Leave", true) {
|
, m_menu_thread_leave("_Leave", true)
|
||||||
|
, m_menu_thread_archive("_Archive", true)
|
||||||
|
, m_menu_thread_unarchive("_Unarchive", true) {
|
||||||
get_style_context()->add_class("channel-list");
|
get_style_context()->add_class("channel-list");
|
||||||
|
|
||||||
const auto cb = [this](const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *column) {
|
const auto cb = [this](const Gtk::TreeModel::Path &path, Gtk::TreeViewColumn *column) {
|
||||||
@@ -130,10 +132,20 @@ ChannelList::ChannelList()
|
|||||||
if (Abaddon::Get().ShowConfirm("Are you sure you want to leave this thread?"))
|
if (Abaddon::Get().ShowConfirm("Are you sure you want to leave this thread?"))
|
||||||
Abaddon::Get().GetDiscordClient().LeaveThread(static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), "Context%20Menu", [](...) {});
|
Abaddon::Get().GetDiscordClient().LeaveThread(static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), "Context%20Menu", [](...) {});
|
||||||
});
|
});
|
||||||
|
m_menu_thread_archive.signal_activate().connect([this] {
|
||||||
|
Abaddon::Get().GetDiscordClient().ArchiveThread(static_cast<Snowflake>((*m_model->get_iter(m_path_for_menu))[m_columns.m_id]), [](...) {});
|
||||||
|
});
|
||||||
|
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.append(m_menu_thread_copy_id);
|
||||||
m_menu_thread.append(m_menu_thread_leave);
|
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.show_all();
|
m_menu_thread.show_all();
|
||||||
|
|
||||||
|
m_menu_thread.signal_popped_up().connect(sigc::mem_fun(*this, &ChannelList::OnThreadSubmenuPopup));
|
||||||
|
|
||||||
auto &discord = Abaddon::Get().GetDiscordClient();
|
auto &discord = Abaddon::Get().GetDiscordClient();
|
||||||
discord.signal_message_create().connect(sigc::mem_fun(*this, &ChannelList::OnMessageCreate));
|
discord.signal_message_create().connect(sigc::mem_fun(*this, &ChannelList::OnMessageCreate));
|
||||||
discord.signal_guild_create().connect(sigc::mem_fun(*this, &ChannelList::UpdateNewGuild));
|
discord.signal_guild_create().connect(sigc::mem_fun(*this, &ChannelList::UpdateNewGuild));
|
||||||
@@ -692,6 +704,19 @@ void ChannelList::MoveRow(const Gtk::TreeModel::iterator &iter, const Gtk::TreeM
|
|||||||
m_model->erase(iter);
|
m_model->erase(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
auto iter = m_model->get_iter(m_path_for_menu);
|
||||||
|
if (!iter) return;
|
||||||
|
auto channel = Abaddon::Get().GetDiscordClient().GetChannel(static_cast<Snowflake>((*iter)[m_columns.m_id]));
|
||||||
|
if (!channel.has_value() || !channel->ThreadMetadata.has_value()) return;
|
||||||
|
|
||||||
|
m_menu_thread_archive.set_visible(!channel->ThreadMetadata->IsArchived);
|
||||||
|
m_menu_thread_unarchive.set_visible(channel->ThreadMetadata->IsArchived);
|
||||||
|
}
|
||||||
|
|
||||||
ChannelList::type_signal_action_channel_item_select ChannelList::signal_action_channel_item_select() {
|
ChannelList::type_signal_action_channel_item_select ChannelList::signal_action_channel_item_select() {
|
||||||
return m_signal_action_channel_item_select;
|
return m_signal_action_channel_item_select;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,6 +222,10 @@ protected:
|
|||||||
Gtk::Menu m_menu_thread;
|
Gtk::Menu m_menu_thread;
|
||||||
Gtk::MenuItem m_menu_thread_copy_id;
|
Gtk::MenuItem m_menu_thread_copy_id;
|
||||||
Gtk::MenuItem m_menu_thread_leave;
|
Gtk::MenuItem m_menu_thread_leave;
|
||||||
|
Gtk::MenuItem m_menu_thread_archive;
|
||||||
|
Gtk::MenuItem m_menu_thread_unarchive;
|
||||||
|
|
||||||
|
void OnThreadSubmenuPopup(const Gdk::Rectangle *flipped_rect, const Gdk::Rectangle *final_rect, bool flipped_x, bool flipped_y);
|
||||||
|
|
||||||
bool m_updating_listing = false;
|
bool m_updating_listing = false;
|
||||||
|
|
||||||
|
|||||||
@@ -824,6 +824,30 @@ void DiscordClient::LeaveThread(Snowflake channel_id, const std::string &locatio
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DiscordClient::ArchiveThread(Snowflake channel_id, sigc::slot<void(DiscordError code)> callback) {
|
||||||
|
ModifyChannelObject obj;
|
||||||
|
obj.Archived = true;
|
||||||
|
obj.Locked = true;
|
||||||
|
m_http.MakePATCH("/channels/" + std::to_string(channel_id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &response) {
|
||||||
|
if (CheckCode(response))
|
||||||
|
callback(DiscordError::NONE);
|
||||||
|
else
|
||||||
|
callback(GetCodeFromResponse(response));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiscordClient::UnArchiveThread(Snowflake channel_id, sigc::slot<void(DiscordError code)> callback) {
|
||||||
|
ModifyChannelObject obj;
|
||||||
|
obj.Archived = false;
|
||||||
|
obj.Locked = false;
|
||||||
|
m_http.MakePATCH("/channels/" + std::to_string(channel_id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &response) {
|
||||||
|
if (CheckCode(response))
|
||||||
|
callback(DiscordError::NONE);
|
||||||
|
else
|
||||||
|
callback(GetCodeFromResponse(response));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void DiscordClient::FetchPinned(Snowflake id, sigc::slot<void(std::vector<Message>, DiscordError code)> callback) {
|
void DiscordClient::FetchPinned(Snowflake id, sigc::slot<void(std::vector<Message>, DiscordError code)> callback) {
|
||||||
// return from db if we know the pins have already been requested
|
// return from db if we know the pins have already been requested
|
||||||
if (m_channels_pinned_requested.find(id) != m_channels_pinned_requested.end()) {
|
if (m_channels_pinned_requested.find(id) != m_channels_pinned_requested.end()) {
|
||||||
|
|||||||
@@ -143,6 +143,8 @@ public:
|
|||||||
void Pin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback);
|
void Pin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback);
|
||||||
void Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback);
|
void Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback);
|
||||||
void LeaveThread(Snowflake channel_id, const std::string &location, sigc::slot<void(DiscordError code)> callback);
|
void LeaveThread(Snowflake channel_id, const std::string &location, sigc::slot<void(DiscordError code)> callback);
|
||||||
|
void ArchiveThread(Snowflake channel_id, sigc::slot<void(DiscordError code)> callback);
|
||||||
|
void UnArchiveThread(Snowflake channel_id, sigc::slot<void(DiscordError code)> callback);
|
||||||
|
|
||||||
bool CanModifyRole(Snowflake guild_id, Snowflake role_id) const;
|
bool CanModifyRole(Snowflake guild_id, Snowflake role_id) const;
|
||||||
bool CanModifyRole(Snowflake guild_id, Snowflake role_id, Snowflake user_id) const;
|
bool CanModifyRole(Snowflake guild_id, Snowflake role_id, Snowflake user_id) const;
|
||||||
|
|||||||
@@ -527,3 +527,8 @@ void from_json(const nlohmann::json &j, ThreadMemberListUpdateData &m) {
|
|||||||
JS_D("guild_id", m.GuildID);
|
JS_D("guild_id", m.GuildID);
|
||||||
JS_D("members", m.Members);
|
JS_D("members", m.Members);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void to_json(nlohmann::json &j, const ModifyChannelObject &m) {
|
||||||
|
JS_IF("archived", m.Archived);
|
||||||
|
JS_IF("locked", m.Locked);
|
||||||
|
}
|
||||||
|
|||||||
@@ -738,3 +738,10 @@ struct ThreadMemberListUpdateData {
|
|||||||
|
|
||||||
friend void from_json(const nlohmann::json &j, ThreadMemberListUpdateData &m);
|
friend void from_json(const nlohmann::json &j, ThreadMemberListUpdateData &m);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ModifyChannelObject {
|
||||||
|
std::optional<bool> Archived;
|
||||||
|
std::optional<bool> Locked;
|
||||||
|
|
||||||
|
friend void to_json(nlohmann::json &j, const ModifyChannelObject &m);
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user