diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-03-17 02:19:15 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-03-17 02:19:15 -0400 |
commit | 65943b4bd74ae52e6f6ffbff0e9ba619053172d6 (patch) | |
tree | 2dccda0581fab9379bde1586aa1c63079f555099 /windows | |
parent | 72d771d88b625cf29913ab02497aa8f331c247e5 (diff) | |
download | abaddon-portaudio-65943b4bd74ae52e6f6ffbff0e9ba619053172d6.tar.gz abaddon-portaudio-65943b4bd74ae52e6f6ffbff0e9ba619053172d6.zip |
reduce concurrent requests in guild settings + profile
disable gtk's treeview search in bans+invites
Diffstat (limited to 'windows')
-rw-r--r-- | windows/guildsettings/auditlogpane.cpp | 13 | ||||
-rw-r--r-- | windows/guildsettings/auditlogpane.hpp | 7 | ||||
-rw-r--r-- | windows/guildsettings/banspane.cpp | 18 | ||||
-rw-r--r-- | windows/guildsettings/banspane.hpp | 7 | ||||
-rw-r--r-- | windows/guildsettings/invitespane.cpp | 16 | ||||
-rw-r--r-- | windows/guildsettings/invitespane.hpp | 7 | ||||
-rw-r--r-- | windows/guildsettingswindow.cpp | 6 | ||||
-rw-r--r-- | windows/profile/mutualfriendspane.cpp | 9 | ||||
-rw-r--r-- | windows/profile/mutualfriendspane.hpp | 11 | ||||
-rw-r--r-- | windows/profilewindow.cpp | 11 | ||||
-rw-r--r-- | windows/profilewindow.hpp | 1 |
11 files changed, 82 insertions, 24 deletions
diff --git a/windows/guildsettings/auditlogpane.cpp b/windows/guildsettings/auditlogpane.cpp index d6b6fee..cd82425 100644 --- a/windows/guildsettings/auditlogpane.cpp +++ b/windows/guildsettings/auditlogpane.cpp @@ -9,15 +9,20 @@ GuildSettingsAuditLogPane::GuildSettingsAuditLogPane(Snowflake id) set_hexpand(true); set_vexpand(true); + m_list.set_selection_mode(Gtk::SELECTION_NONE); + m_list.show(); + add(m_list); +} + +void GuildSettingsAuditLogPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + auto &discord = Abaddon::Get().GetDiscordClient(); const auto self_id = discord.GetUserData().ID; if (discord.HasGuildPermission(self_id, GuildID, Permission::VIEW_AUDIT_LOG)) discord.FetchAuditLog(GuildID, sigc::mem_fun(*this, &GuildSettingsAuditLogPane::OnAuditLogFetch)); - - m_list.set_selection_mode(Gtk::SELECTION_NONE); - m_list.show(); - add(m_list); } void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) { diff --git a/windows/guildsettings/auditlogpane.hpp b/windows/guildsettings/auditlogpane.hpp index caa5af6..9421e22 100644 --- a/windows/guildsettings/auditlogpane.hpp +++ b/windows/guildsettings/auditlogpane.hpp @@ -1,12 +1,17 @@ #pragma once #include <gtkmm.h> +#include "../../components//inotifyswitched.hpp" #include "../../discord/objects.hpp" -class GuildSettingsAuditLogPane : public Gtk::ScrolledWindow { +class GuildSettingsAuditLogPane : public Gtk::ScrolledWindow, public INotifySwitched { public: GuildSettingsAuditLogPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + Gtk::ListBox m_list; void OnAuditLogFetch(const AuditLogData &data); diff --git a/windows/guildsettings/banspane.cpp b/windows/guildsettings/banspane.cpp index 517ae09..3ea71bb 100644 --- a/windows/guildsettings/banspane.cpp +++ b/windows/guildsettings/banspane.cpp @@ -22,9 +22,7 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) const auto self_id = discord.GetUserData().ID; const auto can_ban = discord.HasGuildPermission(self_id, GuildID, Permission::BAN_MEMBERS); - if (can_ban) { - discord.FetchGuildBans(id, sigc::mem_fun(*this, &GuildSettingsBansPane::OnGuildBansFetch)); - } else { + if (!can_ban) { for (const auto &ban : discord.GetBansInGuild(id)) OnGuildBanFetch(ban); @@ -50,11 +48,25 @@ GuildSettingsBansPane::GuildSettingsBansPane(Snowflake id) add(m_scroll); show_all_children(); + m_view.set_enable_search(false); m_view.set_model(m_model); m_view.append_column("User", m_columns.m_col_user); m_view.append_column("Reason", m_columns.m_col_reason); } +void GuildSettingsBansPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + + auto &discord = Abaddon::Get().GetDiscordClient(); + + const auto self_id = discord.GetUserData().ID; + const auto can_ban = discord.HasGuildPermission(self_id, GuildID, Permission::BAN_MEMBERS); + + if (can_ban) + discord.FetchGuildBans(GuildID, sigc::mem_fun(*this, &GuildSettingsBansPane::OnGuildBansFetch)); +} + void GuildSettingsBansPane::OnGuildBanFetch(const BanData &ban) { const auto user = Abaddon::Get().GetDiscordClient().GetUser(ban.User.ID); auto &row = *m_model->append(); diff --git a/windows/guildsettings/banspane.hpp b/windows/guildsettings/banspane.hpp index f492226..39fef78 100644 --- a/windows/guildsettings/banspane.hpp +++ b/windows/guildsettings/banspane.hpp @@ -1,13 +1,18 @@ #pragma once #include <gtkmm.h> +#include "../../components/inotifyswitched.hpp" #include "../../discord/snowflake.hpp" #include "../../discord/ban.hpp" -class GuildSettingsBansPane : public Gtk::Box { +class GuildSettingsBansPane : public Gtk::Box, public INotifySwitched { public: GuildSettingsBansPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + void OnGuildBanFetch(const BanData &ban); void OnGuildBansFetch(const std::vector<BanData> &bans); void OnMenuUnban(); diff --git a/windows/guildsettings/invitespane.cpp b/windows/guildsettings/invitespane.cpp index a47460f..8e91bf6 100644 --- a/windows/guildsettings/invitespane.cpp +++ b/windows/guildsettings/invitespane.cpp @@ -16,10 +16,6 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) m_menu.show_all(); auto &discord = Abaddon::Get().GetDiscordClient(); - const auto self_id = discord.GetUserData().ID; - - if (discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD)) - discord.FetchGuildInvites(GuildID, sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInvitesFetch)); discord.signal_invite_create().connect(sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInviteCreate)); discord.signal_invite_delete().connect(sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInviteDelete)); @@ -27,6 +23,7 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) m_view.show(); add(m_view); + m_view.set_enable_search(false); m_view.set_model(m_model); m_view.append_column("Code", m_columns.m_col_code); m_view.append_column("Expires", m_columns.m_col_expires); @@ -39,6 +36,17 @@ GuildSettingsInvitesPane::GuildSettingsInvitesPane(Snowflake id) column->set_resizable(true); } +void GuildSettingsInvitesPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + + auto &discord = Abaddon::Get().GetDiscordClient(); + const auto self_id = discord.GetUserData().ID; + + if (discord.HasGuildPermission(self_id, GuildID, Permission::MANAGE_GUILD)) + discord.FetchGuildInvites(GuildID, sigc::mem_fun(*this, &GuildSettingsInvitesPane::OnInvitesFetch)); +} + void GuildSettingsInvitesPane::AppendInvite(const InviteData &invite) { auto &discord = Abaddon::Get().GetDiscordClient(); auto &row = *m_model->append(); diff --git a/windows/guildsettings/invitespane.hpp b/windows/guildsettings/invitespane.hpp index c32f194..b9d1255 100644 --- a/windows/guildsettings/invitespane.hpp +++ b/windows/guildsettings/invitespane.hpp @@ -1,12 +1,17 @@ #pragma once #include <gtkmm.h> +#include "../../components/inotifyswitched.hpp" #include "../../discord/objects.hpp" -class GuildSettingsInvitesPane : public Gtk::ScrolledWindow { +class GuildSettingsInvitesPane : public Gtk::ScrolledWindow, public INotifySwitched { public: GuildSettingsInvitesPane(Snowflake id); private: + void on_switched_to() override; + + bool m_requested = false; + void AppendInvite(const InviteData &invite); void OnInviteFetch(const std::optional<InviteData> &invite); void OnInvitesFetch(const std::vector<InviteData> &invites); diff --git a/windows/guildsettingswindow.cpp b/windows/guildsettingswindow.cpp index 9fd0d20..bcbc393 100644 --- a/windows/guildsettingswindow.cpp +++ b/windows/guildsettingswindow.cpp @@ -1,5 +1,6 @@ #include "guildsettingswindow.hpp" #include "../abaddon.hpp" +#include "../components/inotifyswitched.hpp" GuildSettingsWindow::GuildSettingsWindow(Snowflake id) : m_main(Gtk::ORIENTATION_VERTICAL) @@ -40,6 +41,11 @@ GuildSettingsWindow::GuildSettingsWindow(Snowflake id) m_switcher.set_margin_top(10); m_switcher.show(); + m_stack.property_visible_child().signal_changed().connect([this]() { + if (auto *w = dynamic_cast<INotifySwitched *>(m_stack.property_visible_child().get_value())) + w->on_switched_to(); + }); + m_pane_info.show(); m_pane_members.show(); m_pane_roles.show(); diff --git a/windows/profile/mutualfriendspane.cpp b/windows/profile/mutualfriendspane.cpp index 094de2f..e0d6fc4 100644 --- a/windows/profile/mutualfriendspane.cpp +++ b/windows/profile/mutualfriendspane.cpp @@ -40,7 +40,7 @@ MutualFriendsPane::MutualFriendsPane(Snowflake id) show_all_children(); } -void MutualFriendsPane::SetMutualFriends(const std::vector<UserData> &users) { +void MutualFriendsPane::OnFetchRelationships(const std::vector<UserData> &users) { for (auto child : m_list.get_children()) delete child; @@ -50,3 +50,10 @@ void MutualFriendsPane::SetMutualFriends(const std::vector<UserData> &users) { m_list.add(*item); } } + +void MutualFriendsPane::on_switched_to() { + if (m_requested) return; + m_requested = true; + + Abaddon::Get().GetDiscordClient().FetchUserRelationships(UserID, sigc::mem_fun(*this, &MutualFriendsPane::OnFetchRelationships)); +} diff --git a/windows/profile/mutualfriendspane.hpp b/windows/profile/mutualfriendspane.hpp index 70774a7..10daa39 100644 --- a/windows/profile/mutualfriendspane.hpp +++ b/windows/profile/mutualfriendspane.hpp @@ -1,5 +1,6 @@ #pragma once #include <gtkmm.h> +#include "../../components/inotifyswitched.hpp" #include "../../discord/objects.hpp" class MutualFriendItem : public Gtk::Box { @@ -11,14 +12,18 @@ private: Gtk::Label m_name; }; -class MutualFriendsPane : public Gtk::ScrolledWindow { +class MutualFriendsPane : public Gtk::ScrolledWindow, public INotifySwitched { public: MutualFriendsPane(Snowflake id); - void SetMutualFriends(const std::vector<UserData> &users); - Snowflake UserID; private: + void on_switched_to() override; + + bool m_requested = false; + + void OnFetchRelationships(const std::vector<UserData> &users); + Gtk::ListBox m_list; }; diff --git a/windows/profilewindow.cpp b/windows/profilewindow.cpp index 9e8c798..d6ce320 100644 --- a/windows/profilewindow.cpp +++ b/windows/profilewindow.cpp @@ -1,5 +1,6 @@ #include "profilewindow.hpp" #include "../abaddon.hpp" +#include "../components/inotifyswitched.hpp" ProfileWindow::ProfileWindow(Snowflake user_id) : ID(user_id) @@ -13,7 +14,6 @@ ProfileWindow::ProfileWindow(Snowflake user_id) auto user = *discord.GetUser(ID); discord.FetchUserProfile(user_id, sigc::mem_fun(*this, &ProfileWindow::OnFetchProfile)); - discord.FetchUserRelationships(user_id, sigc::mem_fun(*this, &ProfileWindow::OnFetchRelationships)); set_name("user-profile"); set_default_size(450, 375); @@ -72,6 +72,11 @@ ProfileWindow::ProfileWindow(Snowflake user_id) m_switcher.set_halign(Gtk::ALIGN_START); m_switcher.set_hexpand(true); + m_stack.property_visible_child().signal_changed().connect([this]() { + if (auto *w = dynamic_cast<INotifySwitched *>(m_stack.property_visible_child().get_value())) + w->on_switched_to(); + }); + m_stack.add(m_pane_info, "info", "User Info"); m_stack.add(m_pane_guilds, "guilds", "Mutual Servers"); m_stack.add(m_pane_friends, "friends", "Mutual Friends"); @@ -127,7 +132,3 @@ void ProfileWindow::OnFetchProfile(const UserProfileData &data) { m_badges.add(*image); } } - -void ProfileWindow::OnFetchRelationships(const std::vector<UserData> &data) { - m_pane_friends.SetMutualFriends(data); -} diff --git a/windows/profilewindow.hpp b/windows/profilewindow.hpp index f234f10..044c128 100644 --- a/windows/profilewindow.hpp +++ b/windows/profilewindow.hpp @@ -13,7 +13,6 @@ public: private: void OnFetchProfile(const UserProfileData &data); - void OnFetchRelationships(const std::vector<UserData> &data); Gtk::Box m_main; Gtk::Box m_upper; |