summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/memberlist.cpp15
-rw-r--r--components/memberlist.hpp2
-rw-r--r--http.cpp12
-rw-r--r--http.hpp2
4 files changed, 18 insertions, 13 deletions
diff --git a/components/memberlist.cpp b/components/memberlist.cpp
index 81757e2..ed02505 100644
--- a/components/memberlist.cpp
+++ b/components/memberlist.cpp
@@ -6,7 +6,7 @@
constexpr static const int MaxMemberListRows = 200;
-MemberListUserRow::MemberListUserRow(const GuildData *guild, const UserData &data) {
+MemberListUserRow::MemberListUserRow(const std::optional<GuildData> &guild, const UserData &data) {
ID = data.ID;
m_ev = Gtk::manage(new Gtk::EventBox);
m_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
@@ -15,7 +15,7 @@ MemberListUserRow::MemberListUserRow(const GuildData *guild, const UserData &dat
m_status_indicator = Gtk::manage(new StatusIndicator(ID));
static bool crown = Abaddon::Get().GetSettings().GetShowOwnerCrown();
- if (crown && guild != nullptr && guild->OwnerID == data.ID) {
+ if (crown && guild.has_value() && guild->OwnerID == data.ID) {
try {
auto pixbuf = Gdk::Pixbuf::create_from_file("./res/crown.png", 12, 12);
m_crown = Gtk::manage(new Gtk::Image(pixbuf));
@@ -26,7 +26,10 @@ MemberListUserRow::MemberListUserRow(const GuildData *guild, const UserData &dat
m_status_indicator->set_margin_start(3);
- m_avatar->SetURL(data.GetAvatarURL(guild->ID, "png"));
+ if (guild.has_value())
+ m_avatar->SetURL(data.GetAvatarURL(guild->ID, "png"));
+ else
+ m_avatar->SetURL(data.GetAvatarURL("png"));
get_style_context()->add_class("members-row");
get_style_context()->add_class("members-row-member");
@@ -40,7 +43,7 @@ MemberListUserRow::MemberListUserRow(const GuildData *guild, const UserData &dat
std::string display = data.Username;
if (show_discriminator)
display += "#" + data.Discriminator;
- if (guild != nullptr) {
+ if (guild.has_value()) {
if (const auto col_id = data.GetHoistedRole(guild->ID, true); col_id.IsValid()) {
auto color = Abaddon::Get().GetDiscordClient().GetRole(col_id)->Color;
m_label->set_use_markup(true);
@@ -114,7 +117,7 @@ void MemberList::UpdateMemberList() {
int num_rows = 0;
for (const auto &user : chan->GetDMRecipients()) {
if (num_rows++ > MaxMemberListRows) break;
- auto *row = Gtk::manage(new MemberListUserRow(nullptr, user));
+ auto *row = Gtk::manage(new MemberListUserRow(std::nullopt, user));
m_id_to_row[user.ID] = row;
AttachUserMenuHandler(row, user.ID);
m_listbox->add(*row);
@@ -156,7 +159,7 @@ void MemberList::UpdateMemberList() {
const auto guild = *discord.GetGuild(m_guild_id);
auto add_user = [this, &user_to_color, &num_rows, guild](const UserData &data) -> bool {
if (num_rows++ > MaxMemberListRows) return false;
- auto *row = Gtk::manage(new MemberListUserRow(&guild, data));
+ auto *row = Gtk::manage(new MemberListUserRow(guild, data));
m_id_to_row[data.ID] = row;
AttachUserMenuHandler(row, data.ID);
m_listbox->add(*row);
diff --git a/components/memberlist.hpp b/components/memberlist.hpp
index b765f13..180e76d 100644
--- a/components/memberlist.hpp
+++ b/components/memberlist.hpp
@@ -9,7 +9,7 @@ class LazyImage;
class StatusIndicator;
class MemberListUserRow : public Gtk::ListBoxRow {
public:
- MemberListUserRow(const GuildData *guild, const UserData &data);
+ MemberListUserRow(const std::optional<GuildData> &guild, const UserData &data);
Snowflake ID;
diff --git a/http.cpp b/http.cpp
index 8eaaa2e..790add7 100644
--- a/http.cpp
+++ b/http.cpp
@@ -64,12 +64,14 @@ response request::execute() {
detail::check_init();
std::string str;
+ curl_easy_setopt(m_curl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(m_curl, CURLOPT_CUSTOMREQUEST, m_method);
curl_easy_setopt(m_curl, CURLOPT_URL, m_url.c_str());
curl_easy_setopt(m_curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, detail::curl_write_data_callback);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, &str);
curl_easy_setopt(m_curl, CURLOPT_ERRORBUFFER, m_error_buf);
+ m_error_buf[0] = '\0';
if (m_header_list != nullptr)
curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, m_header_list);
@@ -81,7 +83,7 @@ response request::execute() {
return response;
}
- int response_code = 0;
+ long response_code = 0;
curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &response_code);
auto response = detail::make_response(m_url, response_code);
@@ -95,10 +97,10 @@ void request::prepare() {
}
namespace detail {
- size_t curl_write_data_callback(void *ptr, size_t size, size_t nmemb, std::string *outstr) {
- auto new_length = size * nmemb;
- outstr->append(reinterpret_cast<char *>(ptr), new_length);
- return new_length;
+ size_t curl_write_data_callback(void *ptr, size_t size, size_t nmemb, void *userdata) {
+ const size_t n = size * nmemb;
+ static_cast<std::string*>(userdata)->append(static_cast<char*>(ptr), n);
+ return n;
}
response make_response(const std::string &url, int code) {
diff --git a/http.hpp b/http.hpp
index d18ccf0..c2e2765 100644
--- a/http.hpp
+++ b/http.hpp
@@ -121,7 +121,7 @@ private:
using response_type = response;
namespace detail {
- size_t curl_write_data_callback(void *ptr, size_t size, size_t nmemb, std::string *outstr);
+ size_t curl_write_data_callback(void *ptr, size_t size, size_t nmemb, void *userdata);
response make_response(const std::string &url, int code);
void check_init();