summaryrefslogtreecommitdiff
path: root/src/windows/pinnedwindow.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-11-28 22:48:30 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-11-28 22:48:30 -0500
commite1703aea3fd597b23bde90e6c505278c517be611 (patch)
tree37d98fc90c9cd0844388bfb79beda2204f44af92 /src/windows/pinnedwindow.cpp
parentfd53a76bf6f53a095a639765923a30f2206b2cd6 (diff)
parente02107feea8214a045e6faa969f00dcbc0d2b072 (diff)
downloadabaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.tar.gz
abaddon-portaudio-e1703aea3fd597b23bde90e6c505278c517be611.zip
merge master
Diffstat (limited to 'src/windows/pinnedwindow.cpp')
-rw-r--r--src/windows/pinnedwindow.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/windows/pinnedwindow.cpp b/src/windows/pinnedwindow.cpp
new file mode 100644
index 0000000..a5484e3
--- /dev/null
+++ b/src/windows/pinnedwindow.cpp
@@ -0,0 +1,47 @@
+#include "pinnedwindow.hpp"
+#include "abaddon.hpp"
+
+PinnedWindow::PinnedWindow(const ChannelData &data)
+ : ChannelID(data.ID) {
+ if (data.GuildID.has_value())
+ GuildID = *data.GuildID;
+
+ set_name("pinned-messages");
+ set_default_size(450, 375);
+ if (data.Name.has_value())
+ set_title("#" + *data.Name + " - Pinned Messages");
+ else
+ set_title("Pinned Messages");
+ set_position(Gtk::WIN_POS_CENTER);
+ get_style_context()->add_class("app-window");
+ get_style_context()->add_class("app-popup");
+ get_style_context()->add_class("pinned-messages-window");
+
+ add(m_chat);
+ m_chat.show();
+
+ m_chat.SetSeparateAll(true);
+ m_chat.SetActiveChannel(ChannelID);
+ m_chat.SetUsePinnedMenu();
+
+ Abaddon::Get().GetDiscordClient().signal_message_pinned().connect(sigc::mem_fun(*this, &PinnedWindow::OnMessagePinned));
+ Abaddon::Get().GetDiscordClient().signal_message_unpinned().connect(sigc::mem_fun(*this, &PinnedWindow::OnMessageUnpinned));
+ FetchPinned();
+}
+
+void PinnedWindow::OnMessagePinned(const Message &msg) {
+ FetchPinned();
+}
+
+void PinnedWindow::OnMessageUnpinned(const Message &msg) {
+ m_chat.ActuallyRemoveMessage(msg.ID);
+}
+
+void PinnedWindow::FetchPinned() {
+ Abaddon::Get().GetDiscordClient().FetchPinned(ChannelID, sigc::mem_fun(*this, &PinnedWindow::OnFetchedPinned));
+}
+
+void PinnedWindow::OnFetchedPinned(const std::vector<Message> &msgs, DiscordError code) {
+ if (code != DiscordError::NONE) return;
+ m_chat.SetMessages(msgs.begin(), msgs.end());
+}