forked from OpenGamers/abaddon
add pin menu item to messages
This commit is contained in:
@@ -73,6 +73,12 @@ ChatList::ChatList() {
|
|||||||
});
|
});
|
||||||
m_menu.append(*m_menu_unpin);
|
m_menu.append(*m_menu_unpin);
|
||||||
|
|
||||||
|
m_menu_pin = Gtk::manage(new Gtk::MenuItem("Pin"));
|
||||||
|
m_menu_pin->signal_activate().connect([this] {
|
||||||
|
Abaddon::Get().GetDiscordClient().Pin(m_active_channel, m_menu_selected_message, [](...) {});
|
||||||
|
});
|
||||||
|
m_menu.append(*m_menu_pin);
|
||||||
|
|
||||||
m_menu.show();
|
m_menu.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,12 +165,15 @@ void ChatList::ProcessNewMessage(const Message &data, bool prepend) {
|
|||||||
if (ev->type == GDK_BUTTON_PRESS && ev->button == GDK_BUTTON_SECONDARY) {
|
if (ev->type == GDK_BUTTON_PRESS && ev->button == GDK_BUTTON_SECONDARY) {
|
||||||
m_menu_selected_message = id;
|
m_menu_selected_message = id;
|
||||||
|
|
||||||
m_menu_edit_message->set_visible(!m_use_pinned_menu);
|
|
||||||
m_menu_reply_to->set_visible(!m_use_pinned_menu);
|
|
||||||
m_menu_unpin->set_visible(m_use_pinned_menu);
|
|
||||||
|
|
||||||
const auto &client = Abaddon::Get().GetDiscordClient();
|
const auto &client = Abaddon::Get().GetDiscordClient();
|
||||||
const auto data = client.GetMessage(id);
|
const auto data = client.GetMessage(id);
|
||||||
|
if (!data.has_value()) return false;
|
||||||
|
|
||||||
|
m_menu_edit_message->set_visible(!m_use_pinned_menu);
|
||||||
|
m_menu_reply_to->set_visible(!m_use_pinned_menu);
|
||||||
|
m_menu_unpin->set_visible(data->IsPinned);
|
||||||
|
m_menu_pin->set_visible(!data->IsPinned);
|
||||||
|
|
||||||
if (data->IsDeleted()) {
|
if (data->IsDeleted()) {
|
||||||
m_menu_delete_message->set_sensitive(false);
|
m_menu_delete_message->set_sensitive(false);
|
||||||
m_menu_edit_message->set_sensitive(false);
|
m_menu_edit_message->set_sensitive(false);
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ private:
|
|||||||
Gtk::MenuItem *m_menu_edit_message;
|
Gtk::MenuItem *m_menu_edit_message;
|
||||||
Gtk::MenuItem *m_menu_reply_to;
|
Gtk::MenuItem *m_menu_reply_to;
|
||||||
Gtk::MenuItem *m_menu_unpin;
|
Gtk::MenuItem *m_menu_unpin;
|
||||||
|
Gtk::MenuItem *m_menu_pin;
|
||||||
Snowflake m_menu_selected_message;
|
Snowflake m_menu_selected_message;
|
||||||
|
|
||||||
Snowflake m_active_channel;
|
Snowflake m_active_channel;
|
||||||
|
|||||||
@@ -710,6 +710,15 @@ void DiscordClient::PutRelationship(Snowflake id, sigc::slot<void(bool success,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DiscordClient::Pin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback) {
|
||||||
|
m_http.MakePUT("/channels/" + std::to_string(channel_id) + "/pins/" + std::to_string(message_id), "", [this, callback](const http::response_type &response) {
|
||||||
|
if (CheckCode(response, 204))
|
||||||
|
callback(DiscordError::NONE);
|
||||||
|
else
|
||||||
|
callback(GetCodeFromResponse(response));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void DiscordClient::Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback) {
|
void DiscordClient::Unpin(Snowflake channel_id, Snowflake message_id, sigc::slot<void(DiscordError code)> callback) {
|
||||||
m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/pins/" + std::to_string(message_id), [this, callback](const http::response_type &response) {
|
m_http.MakeDELETE("/channels/" + std::to_string(channel_id) + "/pins/" + std::to_string(message_id), [this, callback](const http::response_type &response) {
|
||||||
if (CheckCode(response, 204))
|
if (CheckCode(response, 204))
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ public:
|
|||||||
void RemoveRelationship(Snowflake id, sigc::slot<void(bool success)> callback);
|
void RemoveRelationship(Snowflake id, sigc::slot<void(bool success)> callback);
|
||||||
void SendFriendRequest(const Glib::ustring &username, int discriminator, sigc::slot<void(bool success, DiscordError code)> callback);
|
void SendFriendRequest(const Glib::ustring &username, int discriminator, sigc::slot<void(bool success, DiscordError code)> callback);
|
||||||
void PutRelationship(Snowflake id, sigc::slot<void(bool success, DiscordError code)> callback); // send fr by id, accept incoming
|
void PutRelationship(Snowflake id, sigc::slot<void(bool success, DiscordError code)> callback); // send fr by id, accept incoming
|
||||||
|
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);
|
||||||
|
|
||||||
bool CanModifyRole(Snowflake guild_id, Snowflake role_id) const;
|
bool CanModifyRole(Snowflake guild_id, Snowflake role_id) const;
|
||||||
@@ -327,7 +328,7 @@ public:
|
|||||||
typedef sigc::signal<void, Snowflake, RelationshipType> type_signal_relationship_remove;
|
typedef sigc::signal<void, Snowflake, RelationshipType> type_signal_relationship_remove;
|
||||||
typedef sigc::signal<void, RelationshipAddData> type_signal_relationship_add;
|
typedef sigc::signal<void, RelationshipAddData> type_signal_relationship_add;
|
||||||
typedef sigc::signal<void, Message> type_signal_message_unpinned; // not a real event
|
typedef sigc::signal<void, Message> type_signal_message_unpinned; // not a real event
|
||||||
typedef sigc::signal<void, Message> type_signal_message_pinned; // not a real event either
|
typedef sigc::signal<void, Message> type_signal_message_pinned; // not a real event either
|
||||||
typedef sigc::signal<void, Message> type_signal_message_sent;
|
typedef sigc::signal<void, Message> type_signal_message_sent;
|
||||||
typedef sigc::signal<void, std::string /* nonce */, float /* retry_after */> type_signal_message_send_fail; // retry after param will be 0 if it failed for a reason that isnt slowmode
|
typedef sigc::signal<void, std::string /* nonce */, float /* retry_after */> type_signal_message_send_fail; // retry after param will be 0 if it failed for a reason that isnt slowmode
|
||||||
typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting
|
typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting
|
||||||
|
|||||||
Reference in New Issue
Block a user