summaryrefslogtreecommitdiff
path: root/dialogs
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-03-22 01:30:51 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2021-03-22 01:30:51 -0400
commitac31bc6b94e422b929e63437696994b17002334d (patch)
tree37c68528ee257bb139a39e30a6668da5f00b3613 /dialogs
parent60404783bd4ce9be26233fe66fc3a74475d9eaa3 (diff)
downloadabaddon-portaudio-ac31bc6b94e422b929e63437696994b17002334d.tar.gz
abaddon-portaudio-ac31bc6b94e422b929e63437696994b17002334d.zip
basic member verification for guilds that set rules
Diffstat (limited to 'dialogs')
-rw-r--r--dialogs/verificationgate.cpp51
-rw-r--r--dialogs/verificationgate.hpp22
2 files changed, 73 insertions, 0 deletions
diff --git a/dialogs/verificationgate.cpp b/dialogs/verificationgate.cpp
new file mode 100644
index 0000000..bd034f2
--- /dev/null
+++ b/dialogs/verificationgate.cpp
@@ -0,0 +1,51 @@
+#include "verificationgate.hpp"
+#include "../../abaddon.hpp"
+
+VerificationGateDialog::VerificationGateDialog(Gtk::Window &parent, Snowflake guild_id)
+ : Gtk::Dialog("Verification Required", parent, true)
+ , m_bbox(Gtk::ORIENTATION_HORIZONTAL) {
+ set_default_size(300, 300);
+ get_style_context()->add_class("app-window");
+ get_style_context()->add_class("app-popup");
+
+ m_ok_button = add_button("Accept", Gtk::RESPONSE_OK);
+
+ m_scroll_rules.set_vexpand(true);
+ m_scroll_rules.set_hexpand(true);
+
+ m_description.set_line_wrap(true);
+ m_description.set_line_wrap_mode(Pango::WRAP_WORD_CHAR);
+ m_description.set_halign(Gtk::ALIGN_CENTER);
+ m_description.set_margin_bottom(5);
+
+ m_scroll_rules.add(m_rules);
+ get_content_area()->add(m_description);
+ get_content_area()->add(m_scroll_rules);
+ show_all_children();
+
+ Abaddon::Get().GetDiscordClient().GetVerificationGateInfo(guild_id, sigc::mem_fun(*this, &VerificationGateDialog::OnVerificationGateFetch));
+}
+
+const VerificationGateInfoObject &VerificationGateDialog::GetVerificationGate() const {
+ return m_gate_info;
+}
+
+void VerificationGateDialog::OnVerificationGateFetch(const std::optional<VerificationGateInfoObject> &info) {
+ m_gate_info = *info;
+ if (m_gate_info.Description.has_value())
+ m_description.set_markup("<b>" + Glib::Markup::escape_text(*m_gate_info.Description) + "</b>");
+ else
+ m_description.hide();
+ for (const auto &field : *info->VerificationFields) {
+ if (field.Type == "TERMS") {
+ for (const auto &rule : field.Values) {
+ auto *lbl = Gtk::manage(new Gtk::Label(rule));
+ lbl->set_halign(Gtk::ALIGN_START);
+ lbl->set_ellipsize(Pango::ELLIPSIZE_END);
+ lbl->show();
+ m_rules.add(*lbl);
+ }
+ break;
+ }
+ }
+}
diff --git a/dialogs/verificationgate.hpp b/dialogs/verificationgate.hpp
new file mode 100644
index 0000000..31152b9
--- /dev/null
+++ b/dialogs/verificationgate.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include <gtkmm.h>
+#include <optional>
+#include "../../discord/objects.hpp"
+
+class VerificationGateDialog : public Gtk::Dialog {
+public:
+ VerificationGateDialog(Gtk::Window &parent, Snowflake guild_id);
+ const VerificationGateInfoObject &GetVerificationGate() const;
+
+protected:
+ void OnVerificationGateFetch(const std::optional<VerificationGateInfoObject> &info);
+
+ VerificationGateInfoObject m_gate_info;
+
+ Gtk::Label m_description;
+ Gtk::ScrolledWindow m_scroll_rules;
+ Gtk::ListBox m_rules;
+ Gtk::ButtonBox m_bbox;
+
+ Gtk::Button *m_ok_button;
+};