summaryrefslogtreecommitdiff
path: root/src/windows
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/guildsettings/auditlogpane.cpp18
-rw-r--r--src/windows/guildsettings/banspane.cpp6
-rw-r--r--src/windows/guildsettings/emojispane.cpp2
-rw-r--r--src/windows/guildsettings/invitespane.cpp2
-rw-r--r--src/windows/guildsettings/memberspane.cpp6
-rw-r--r--src/windows/mainwindow.cpp21
-rw-r--r--src/windows/mainwindow.hpp5
-rw-r--r--src/windows/profile/mutualfriendspane.cpp2
-rw-r--r--src/windows/profilewindow.cpp25
-rw-r--r--src/windows/profilewindow.hpp2
-rw-r--r--src/windows/voicesettingswindow.cpp12
-rw-r--r--src/windows/voicesettingswindow.hpp6
-rw-r--r--src/windows/voicewindow.cpp15
13 files changed, 94 insertions, 28 deletions
diff --git a/src/windows/guildsettings/auditlogpane.cpp b/src/windows/guildsettings/auditlogpane.cpp
index 53bfd15..f2f4a17 100644
--- a/src/windows/guildsettings/auditlogpane.cpp
+++ b/src/windows/guildsettings/auditlogpane.cpp
@@ -38,7 +38,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
Glib::ustring user_markup = "<b>Unknown User</b>";
if (entry.UserID.has_value()) {
if (auto user = discord.GetUser(*entry.UserID); user.has_value())
- user_markup = discord.GetUser(*entry.UserID)->GetEscapedBoldString<false>();
+ user_markup = discord.GetUser(*entry.UserID)->GetUsernameEscapedBold();
}
// spaghetti moment
@@ -177,7 +177,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" kicked <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
} break;
case AuditLogActionType::MEMBER_PRUNE: {
@@ -193,21 +193,21 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" banned <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
} break;
case AuditLogActionType::MEMBER_BAN_REMOVE: {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" removed the ban for <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
} break;
case AuditLogActionType::MEMBER_UPDATE: {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" updated <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
if (entry.Changes.has_value())
for (const auto &change : *entry.Changes) {
@@ -227,7 +227,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" updated roles for <b>" +
- target_user->GetEscapedString() + "</b>";
+ target_user->GetUsernameEscaped() + "</b>";
if (entry.Changes.has_value())
for (const auto &change : *entry.Changes) {
if (change.Key == "$remove" && change.NewValue.has_value()) {
@@ -262,7 +262,7 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" added <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b> to the server";
} break;
case AuditLogActionType::ROLE_CREATE: {
@@ -450,14 +450,14 @@ void GuildSettingsAuditLogPane::OnAuditLogFetch(const AuditLogData &data) {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" pinned a message by <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
} break;
case AuditLogActionType::MESSAGE_UNPIN: {
const auto target_user = discord.GetUser(entry.TargetID);
markup = user_markup +
" unpinned a message by <b>" +
- target_user->GetEscapedString() +
+ target_user->GetUsernameEscaped() +
"</b>";
} break;
case AuditLogActionType::STAGE_INSTANCE_CREATE: {
diff --git a/src/windows/guildsettings/banspane.cpp b/src/windows/guildsettings/banspane.cpp
index bfc7331..68a232d 100644
--- a/src/windows/guildsettings/banspane.cpp
+++ b/src/windows/guildsettings/banspane.cpp
@@ -72,7 +72,7 @@ void GuildSettingsBansPane::OnGuildBanFetch(const BanData &ban) {
auto row = *m_model->append();
row[m_columns.m_col_id] = ban.User.ID;
if (user.has_value())
- row[m_columns.m_col_user] = user->Username + "#" + user->Discriminator;
+ row[m_columns.m_col_user] = user->GetUsername();
else
row[m_columns.m_col_user] = "<@" + std::to_string(ban.User.ID) + ">";
@@ -84,7 +84,7 @@ void GuildSettingsBansPane::OnGuildBansFetch(const std::vector<BanData> &bans) {
const auto user = Abaddon::Get().GetDiscordClient().GetUser(ban.User.ID);
auto row = *m_model->append();
row[m_columns.m_col_id] = user->ID;
- row[m_columns.m_col_user] = user->Username + "#" + user->Discriminator;
+ row[m_columns.m_col_user] = user->GetUsername();
row[m_columns.m_col_reason] = ban.Reason;
}
}
@@ -148,7 +148,7 @@ void GuildSettingsBansPane::OnBanAdd(Snowflake guild_id, Snowflake user_id) {
auto user = *discord.GetUser(user_id);
auto row = *m_model->append();
row[m_columns.m_col_id] = user_id;
- row[m_columns.m_col_user] = user.Username + "#" + user.Discriminator;
+ row[m_columns.m_col_user] = user.GetUsername();
row[m_columns.m_col_reason] = "";
}
}
diff --git a/src/windows/guildsettings/emojispane.cpp b/src/windows/guildsettings/emojispane.cpp
index c86ea64..702432f 100644
--- a/src/windows/guildsettings/emojispane.cpp
+++ b/src/windows/guildsettings/emojispane.cpp
@@ -119,7 +119,7 @@ void GuildSettingsEmojisPane::AddEmojiRow(const EmojiData &emoji) {
row[m_columns.m_col_pixbuf] = img.GetPlaceholder(32);
row[m_columns.m_col_name] = emoji.Name;
if (emoji.Creator.has_value())
- row[m_columns.m_col_creator] = emoji.Creator->Username + "#" + emoji.Creator->Discriminator;
+ row[m_columns.m_col_creator] = emoji.Creator->GetUsername();
if (emoji.IsAnimated.has_value())
row[m_columns.m_col_animated] = *emoji.IsAnimated ? "Yes" : "No";
else
diff --git a/src/windows/guildsettings/invitespane.cpp b/src/windows/guildsettings/invitespane.cpp
index 4426f6a..a76b3f2 100644
--- a/src/windows/guildsettings/invitespane.cpp
+++ b/src/windows/guildsettings/invitespane.cpp
@@ -51,7 +51,7 @@ void GuildSettingsInvitesPane::AppendInvite(const InviteData &invite) {
auto row = *m_model->append();
row[m_columns.m_col_code] = invite.Code;
if (invite.Inviter.has_value())
- row[m_columns.m_col_inviter] = invite.Inviter->Username + "#" + invite.Inviter->Discriminator;
+ row[m_columns.m_col_inviter] = invite.Inviter->GetUsername();
if (invite.MaxAge.has_value()) {
if (*invite.MaxAge == 0)
diff --git a/src/windows/guildsettings/memberspane.cpp b/src/windows/guildsettings/memberspane.cpp
index 64c28cb..8c613d0 100644
--- a/src/windows/guildsettings/memberspane.cpp
+++ b/src/windows/guildsettings/memberspane.cpp
@@ -103,7 +103,7 @@ GuildSettingsMembersListItem::GuildSettingsMembersListItem(const GuildData &guil
else
m_avatar.SetURL(member.User->GetAvatarURL("png", "32"));
- DisplayTerm = member.User->Username + "#" + member.User->Discriminator;
+ DisplayTerm = member.User->GetUsername();
const auto member_update_cb = [this](Snowflake guild_id, Snowflake user_id) {
if (user_id == UserID)
@@ -150,9 +150,9 @@ void GuildSettingsMembersListItem::UpdateColor() {
const auto user = *discord.GetUser(UserID);
if (auto color_id = discord.GetMemberHoistedRole(GuildID, UserID, true); color_id.IsValid()) {
auto role = *discord.GetRole(color_id);
- m_name.set_markup("<span color='#" + IntToCSSColor(role.Color) + "'>" + user.GetEscapedBoldString<false>() + "</span>");
+ m_name.set_markup("<span color='#" + IntToCSSColor(role.Color) + "'>" + user.GetUsernameEscapedBold() + "</span>");
} else
- m_name.set_markup(user.GetEscapedBoldString<false>());
+ m_name.set_markup(user.GetUsernameEscapedBold());
}
GuildSettingsMembersPaneInfo::GuildSettingsMembersPaneInfo(Snowflake guild_id)
diff --git a/src/windows/mainwindow.cpp b/src/windows/mainwindow.cpp
index bb09735..8e030ed 100644
--- a/src/windows/mainwindow.cpp
+++ b/src/windows/mainwindow.cpp
@@ -168,6 +168,10 @@ void MainWindow::ToggleMenuVisibility() {
m_menu_bar.set_visible(!m_menu_bar.get_visible());
}
+void MainWindow::EditMessage(Snowflake message_id) {
+ m_chat.StartEditing(message_id);
+}
+
#ifdef WITH_LIBHANDY
void MainWindow::GoBack() {
m_chat.GoBack();
@@ -206,6 +210,9 @@ void MainWindow::OnDiscordSubmenuPopup() {
m_menu_discord_connect.set_sensitive(!token.empty() && !discord_active);
m_menu_discord_disconnect.set_sensitive(discord_active);
m_menu_discord_set_token.set_sensitive(!discord_active);
+#ifdef WITH_QRLOGIN
+ m_menu_discord_login_qr.set_sensitive(!discord_active);
+#endif
m_menu_discord_set_status.set_sensitive(discord_active);
}
@@ -247,12 +254,18 @@ void MainWindow::SetupMenu() {
m_menu_discord_disconnect.set_label("Disconnect");
m_menu_discord_disconnect.set_sensitive(false);
m_menu_discord_set_token.set_label("Set Token");
+ m_menu_discord_login_qr.set_label("Login with QR Code");
+#ifndef WITH_QRLOGIN
+ m_menu_discord_login_qr.set_sensitive(false);
+ m_menu_discord_login_qr.set_tooltip_text("Not compiled with support");
+#endif
m_menu_discord_set_status.set_label("Set Status");
m_menu_discord_set_status.set_sensitive(false);
m_menu_discord_add_recipient.set_label("Add user to DM");
m_menu_discord_sub.append(m_menu_discord_connect);
m_menu_discord_sub.append(m_menu_discord_disconnect);
m_menu_discord_sub.append(m_menu_discord_set_token);
+ m_menu_discord_sub.append(m_menu_discord_login_qr);
m_menu_discord_sub.append(m_menu_discord_set_status);
m_menu_discord_sub.append(m_menu_discord_add_recipient);
m_menu_discord.set_submenu(m_menu_discord_sub);
@@ -331,6 +344,10 @@ void MainWindow::SetupMenu() {
m_signal_action_set_token.emit();
});
+ m_menu_discord_login_qr.signal_activate().connect([this] {
+ m_signal_action_login_qr.emit();
+ });
+
m_menu_file_reload_css.signal_activate().connect([this] {
m_signal_action_reload_css.emit();
});
@@ -421,6 +438,10 @@ MainWindow::type_signal_action_set_token MainWindow::signal_action_set_token() {
return m_signal_action_set_token;
}
+MainWindow::type_signal_action_login_qr MainWindow::signal_action_login_qr() {
+ return m_signal_action_login_qr;
+}
+
MainWindow::type_signal_action_reload_css MainWindow::signal_action_reload_css() {
return m_signal_action_reload_css;
}
diff --git a/src/windows/mainwindow.hpp b/src/windows/mainwindow.hpp
index e075c10..ce2e636 100644
--- a/src/windows/mainwindow.hpp
+++ b/src/windows/mainwindow.hpp
@@ -29,6 +29,7 @@ public:
void UpdateChatReactionRemove(Snowflake id, const Glib::ustring &param);
void UpdateMenus();
void ToggleMenuVisibility();
+ void EditMessage(Snowflake message_id);
#ifdef WITH_LIBHANDY
void GoBack();
@@ -74,6 +75,7 @@ private:
Gtk::MenuItem m_menu_discord_connect;
Gtk::MenuItem m_menu_discord_disconnect;
Gtk::MenuItem m_menu_discord_set_token;
+ Gtk::MenuItem m_menu_discord_login_qr;
Gtk::MenuItem m_menu_discord_set_status;
Gtk::MenuItem m_menu_discord_add_recipient; // move me somewhere else some day
void OnDiscordSubmenuPopup();
@@ -103,6 +105,7 @@ public:
typedef sigc::signal<void> type_signal_action_connect;
typedef sigc::signal<void> type_signal_action_disconnect;
typedef sigc::signal<void> type_signal_action_set_token;
+ typedef sigc::signal<void> type_signal_action_login_qr;
typedef sigc::signal<void> type_signal_action_reload_css;
typedef sigc::signal<void> type_signal_action_set_status;
// this should probably be removed
@@ -113,6 +116,7 @@ public:
type_signal_action_connect signal_action_connect();
type_signal_action_disconnect signal_action_disconnect();
type_signal_action_set_token signal_action_set_token();
+ type_signal_action_login_qr signal_action_login_qr();
type_signal_action_reload_css signal_action_reload_css();
type_signal_action_set_status signal_action_set_status();
type_signal_action_add_recipient signal_action_add_recipient();
@@ -123,6 +127,7 @@ private:
type_signal_action_connect m_signal_action_connect;
type_signal_action_disconnect m_signal_action_disconnect;
type_signal_action_set_token m_signal_action_set_token;
+ type_signal_action_login_qr m_signal_action_login_qr;
type_signal_action_reload_css m_signal_action_reload_css;
type_signal_action_set_status m_signal_action_set_status;
type_signal_action_add_recipient m_signal_action_add_recipient;
diff --git a/src/windows/profile/mutualfriendspane.cpp b/src/windows/profile/mutualfriendspane.cpp
index e9f465b..75fb4a6 100644
--- a/src/windows/profile/mutualfriendspane.cpp
+++ b/src/windows/profile/mutualfriendspane.cpp
@@ -22,7 +22,7 @@ MutualFriendItem::MutualFriendItem(const UserData &user)
img.LoadFromURL(user.GetAvatarURL("png", "32"), sigc::track_obj(cb, *this));
}
- m_name.set_markup(user.GetEscapedBoldString<false>());
+ m_name.set_markup(user.GetUsernameEscapedBold());
m_name.set_valign(Gtk::ALIGN_CENTER);
add(m_avatar);
diff --git a/src/windows/profilewindow.cpp b/src/windows/profilewindow.cpp
index 3d5f140..72996aa 100644
--- a/src/windows/profilewindow.cpp
+++ b/src/windows/profilewindow.cpp
@@ -5,6 +5,7 @@ ProfileWindow::ProfileWindow(Snowflake user_id)
, m_main(Gtk::ORIENTATION_VERTICAL)
, m_upper(Gtk::ORIENTATION_HORIZONTAL)
, m_badges(Gtk::ORIENTATION_HORIZONTAL)
+ , m_name_box(Gtk::ORIENTATION_VERTICAL)
, m_pane_info(user_id)
, m_pane_guilds(user_id)
, m_pane_friends(user_id) {
@@ -15,14 +16,15 @@ ProfileWindow::ProfileWindow(Snowflake user_id)
set_name("user-profile");
set_default_size(450, 375);
- set_title(user.Username + "#" + user.Discriminator);
+ set_title(user.GetUsername());
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("user-profile-window");
m_main.get_style_context()->add_class("profile-main-container");
m_avatar.get_style_context()->add_class("profile-avatar");
- m_username.get_style_context()->add_class("profile-username");
+ m_displayname.get_style_context()->add_class("profile-username");
+ m_username.get_style_context()->add_class("profile-username-nondisplay");
m_switcher.get_style_context()->add_class("profile-switcher");
m_stack.get_style_context()->add_class("profile-stack");
m_badges.get_style_context()->add_class("profile-badges");
@@ -31,8 +33,8 @@ ProfileWindow::ProfileWindow(Snowflake user_id)
m_scroll.set_vexpand(true);
m_scroll.set_propagate_natural_height(true);
- if (user.HasAvatar())
- AddPointerCursor(m_avatar_ev);
+ if (user.HasAvatar()) AddPointerCursor(m_avatar_ev);
+
m_avatar_ev.signal_button_release_event().connect([user](GdkEventButton *event) -> bool {
if (event->type == GDK_BUTTON_RELEASE && event->button == GDK_BUTTON_PRIMARY) {
if (user.HasAnimatedAvatar())
@@ -62,7 +64,8 @@ ProfileWindow::ProfileWindow(Snowflake user_id)
img.LoadFromURL(user.GetAvatarURL("png", "64"), sigc::track_obj(cb, *this));
}
- m_username.set_markup(user.GetEscapedString());
+ m_displayname.set_markup(user.GetDisplayNameEscaped());
+ m_username.set_label(user.GetUsername());
m_switcher.set_stack(m_stack);
m_switcher.set_halign(Gtk::ALIGN_START);
@@ -79,10 +82,13 @@ ProfileWindow::ProfileWindow(Snowflake user_id)
m_upper.set_halign(Gtk::ALIGN_START);
m_avatar.set_halign(Gtk::ALIGN_START);
+ m_displayname.set_halign(Gtk::ALIGN_START);
m_username.set_halign(Gtk::ALIGN_START);
m_avatar_ev.add(m_avatar);
m_upper.add(m_avatar_ev);
- m_upper.add(m_username);
+ m_upper.add(m_name_box);
+ m_name_box.add(m_displayname);
+ m_name_box.add(m_username);
m_badges_scroll.add(m_badges);
m_upper.add(m_badges_scroll);
m_main.add(m_upper);
@@ -97,8 +103,13 @@ void ProfileWindow::OnFetchProfile(const UserProfileData &data) {
m_pane_info.SetProfile(data);
m_pane_guilds.SetMutualGuilds(data.MutualGuilds);
- for (auto child : m_badges.get_children())
+ if (data.LegacyUsername.has_value()) {
+ m_username.set_tooltip_text("Originally known as " + *data.LegacyUsername);
+ }
+
+ for (auto child : m_badges.get_children()) {
delete child;
+ }
if (!data.User.PublicFlags.has_value()) return;
const auto x = *data.User.PublicFlags;
diff --git a/src/windows/profilewindow.hpp b/src/windows/profilewindow.hpp
index 2052e7b..fbc30e0 100644
--- a/src/windows/profilewindow.hpp
+++ b/src/windows/profilewindow.hpp
@@ -16,9 +16,11 @@ private:
Gtk::Box m_main;
Gtk::Box m_upper;
Gtk::Box m_badges;
+ Gtk::Box m_name_box;
Gtk::ScrolledWindow m_badges_scroll;
Gtk::EventBox m_avatar_ev;
Gtk::Image m_avatar;
+ Gtk::Label m_displayname;
Gtk::Label m_username;
Gtk::ScrolledWindow m_scroll;
Gtk::Stack m_stack;
diff --git a/src/windows/voicesettingswindow.cpp b/src/windows/voicesettingswindow.cpp
index c009cbf..3749986 100644
--- a/src/windows/voicesettingswindow.cpp
+++ b/src/windows/voicesettingswindow.cpp
@@ -110,9 +110,17 @@ VoiceSettingsWindow::VoiceSettingsWindow()
}
});
+ m_gain.set_increments(1.0, 5.0);
+ m_gain.set_range(0.0, 6969696969.0);
+ m_gain.set_value(Abaddon::Get().GetAudio().GetCaptureGain() * 100.0);
+ m_gain.signal_value_changed().connect([this]() {
+ m_signal_gain.emit(m_gain.get_value() / 100.0);
+ });
+
m_main.add(m_encoding_mode);
m_main.add(m_signal);
m_main.add(m_bitrate);
+ m_main.add(m_gain);
add(m_main);
show_all_children();
@@ -122,4 +130,8 @@ VoiceSettingsWindow::VoiceSettingsWindow()
});
}
+VoiceSettingsWindow::type_signal_gain VoiceSettingsWindow::signal_gain() {
+ return m_signal_gain;
+}
+
#endif
diff --git a/src/windows/voicesettingswindow.hpp b/src/windows/voicesettingswindow.hpp
index cf6b477..9b3498e 100644
--- a/src/windows/voicesettingswindow.hpp
+++ b/src/windows/voicesettingswindow.hpp
@@ -18,8 +18,14 @@ public:
Gtk::ComboBoxText m_encoding_mode;
Gtk::ComboBoxText m_signal;
Gtk::Scale m_bitrate;
+ Gtk::SpinButton m_gain;
private:
+ using type_signal_gain = sigc::signal<void(double)>;
+ type_signal_gain m_signal_gain;
+
+public:
+ type_signal_gain signal_gain();
};
#endif
diff --git a/src/windows/voicewindow.cpp b/src/windows/voicewindow.cpp
index 9e2efee..829a1b8 100644
--- a/src/windows/voicewindow.cpp
+++ b/src/windows/voicewindow.cpp
@@ -39,7 +39,7 @@ public:
auto &discord = Abaddon::Get().GetDiscordClient();
const auto user = discord.GetUser(id);
if (user.has_value()) {
- m_name.set_text(user->Username);
+ m_name.set_text(user->GetUsername());
m_avatar.SetURL(user->GetAvatarURL("png", "32"));
} else {
m_name.set_text("Unknown user");
@@ -139,7 +139,9 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
m_playback_combo.set_hexpand(true);
m_playback_combo.set_halign(Gtk::ALIGN_FILL);
m_playback_combo.set_model(Abaddon::Get().GetAudio().GetDevices().GetPlaybackDeviceModel());
- m_playback_combo.set_active(Abaddon::Get().GetAudio().GetDevices().GetActivePlaybackDevice());
+ if (const auto iter = Abaddon::Get().GetAudio().GetDevices().GetActivePlaybackDevice()) {
+ m_playback_combo.set_active(iter);
+ }
m_playback_combo.pack_start(*playback_renderer);
m_playback_combo.add_attribute(*playback_renderer, "text", 0);
m_playback_combo.signal_changed().connect([this]() {
@@ -151,7 +153,9 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
m_capture_combo.set_hexpand(true);
m_capture_combo.set_halign(Gtk::ALIGN_FILL);
m_capture_combo.set_model(Abaddon::Get().GetAudio().GetDevices().GetCaptureDeviceModel());
- m_capture_combo.set_active(Abaddon::Get().GetAudio().GetDevices().GetActiveCaptureDevice());
+ if (const auto iter = Abaddon::Get().GetAudio().GetDevices().GetActiveCaptureDevice()) {
+ m_capture_combo.set_active(iter);
+ }
m_capture_combo.pack_start(*capture_renderer);
m_capture_combo.add_attribute(*capture_renderer, "text", 0);
m_capture_combo.signal_changed().connect([this]() {
@@ -163,6 +167,11 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
m_menu_view_sub.append(m_menu_view_settings);
m_menu_view_settings.signal_activate().connect([this]() {
auto *window = new VoiceSettingsWindow;
+ const auto cb = [this](double gain) {
+ m_capture_gain.set_value(gain * 100.0);
+ m_signal_gain.emit(gain);
+ };
+ window->signal_gain().connect(sigc::track_obj(cb, *this));
window->show();
});