summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-06-25 05:53:59 +0000
committerGitHub <noreply@github.com>2023-06-25 05:53:59 +0000
commit66101a25cbe4739ade20484c2a020b9130125ec3 (patch)
treef1f3a2084677d90a37d1c4e3b17a19a606fe8d90 /src/components
parentba24e13419bfa6efd08a0d07f049a6981ff4cd28 (diff)
parent19f7d55c8748e4fcd651540e299347689a2070ad (diff)
downloadabaddon-portaudio-66101a25cbe4739ade20484c2a020b9130125ec3.tar.gz
abaddon-portaudio-66101a25cbe4739ade20484c2a020b9130125ec3.zip
Merge pull request #176 from uowuo/pomelo
pomelo support (and nicknames)
Diffstat (limited to 'src/components')
-rw-r--r--src/components/channels.cpp2
-rw-r--r--src/components/chatinputindicator.cpp14
-rw-r--r--src/components/chatinputindicator.hpp1
-rw-r--r--src/components/chatmessage.cpp28
-rw-r--r--src/components/chatwindow.cpp2
-rw-r--r--src/components/completer.cpp3
-rw-r--r--src/components/friendslist.cpp12
-rw-r--r--src/components/memberlist.cpp14
8 files changed, 46 insertions, 30 deletions
diff --git a/src/components/channels.cpp b/src/components/channels.cpp
index 6a5c8cc..26f3259 100644
--- a/src/components/channels.cpp
+++ b/src/components/channels.cpp
@@ -864,7 +864,7 @@ Gtk::TreeModel::iterator ChannelList::CreateVoiceParticipantRow(const UserData &
auto row = *m_model->append(parent);
row[m_columns.m_type] = RenderType::VoiceParticipant;
row[m_columns.m_id] = user.ID;
- row[m_columns.m_name] = user.GetEscapedName();
+ row[m_columns.m_name] = user.GetDisplayNameEscaped();
const auto voice_state = Abaddon::Get().GetDiscordClient().GetVoiceState(user.ID);
if (voice_state.has_value()) {
diff --git a/src/components/chatinputindicator.cpp b/src/components/chatinputindicator.cpp
index 13315c6..0611e71 100644
--- a/src/components/chatinputindicator.cpp
+++ b/src/components/chatinputindicator.cpp
@@ -54,6 +54,12 @@ void ChatInputIndicator::AddUser(Snowflake channel_id, const UserData &user, int
void ChatInputIndicator::SetActiveChannel(Snowflake id) {
m_active_channel = id;
+ const auto channel = Abaddon::Get().GetDiscordClient().GetChannel(id);
+ if (channel.has_value()) {
+ m_active_guild = channel->GuildID;
+ } else {
+ m_active_guild = std::nullopt;
+ }
ComputeTypingString();
}
@@ -105,14 +111,14 @@ void ChatInputIndicator::ComputeTypingString() {
if (typers.empty()) {
SetTypingString("");
} else if (typers.size() == 1) {
- SetTypingString(typers[0].Username + " is typing...");
+ SetTypingString(typers[0].GetDisplayName(m_active_guild) + " is typing...");
} else if (typers.size() == 2) {
- SetTypingString(typers[0].Username + " and " + typers[1].Username + " are typing...");
+ SetTypingString(typers[0].GetDisplayName(m_active_guild) + " and " + typers[1].GetDisplayName(m_active_guild) + " are typing...");
} else if (typers.size() > 2 && typers.size() <= MaxUsersInIndicator) {
Glib::ustring str;
for (size_t i = 0; i < typers.size() - 1; i++)
- str += typers[i].Username + ", ";
- SetTypingString(str + "and " + typers[typers.size() - 1].Username + " are typing...");
+ str += typers[i].GetDisplayName(m_active_guild) + ", ";
+ SetTypingString(str + "and " + typers[typers.size() - 1].GetDisplayName(m_active_guild) + " are typing...");
} else { // size() > MaxUsersInIndicator
SetTypingString("Several people are typing...");
}
diff --git a/src/components/chatinputindicator.hpp b/src/components/chatinputindicator.hpp
index 40c966e..5688393 100644
--- a/src/components/chatinputindicator.hpp
+++ b/src/components/chatinputindicator.hpp
@@ -23,5 +23,6 @@ private:
Glib::ustring m_custom_markup;
Snowflake m_active_channel;
+ std::optional<Snowflake> m_active_guild;
std::unordered_map<Snowflake, std::unordered_map<Snowflake, sigc::connection>> m_typers; // channel id -> [user id -> connection]
};
diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp
index 4b2e748..4fde039 100644
--- a/src/components/chatmessage.cpp
+++ b/src/components/chatmessage.cpp
@@ -221,36 +221,36 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) {
if (data->Mentions.empty()) break;
const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
const auto &added = data->Mentions[0];
- b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->Username + "</span> added <span color='#eeeeee'>" + added.Username + "</span></span></i>");
+ b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->GetUsername() + "</span> added <span color='#eeeeee'>" + added.GetUsername() + "</span></span></i>");
} break;
case MessageType::RECIPIENT_REMOVE: {
if (data->Mentions.empty()) break;
const auto &adder = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
const auto &added = data->Mentions[0];
if (adder->ID == added.ID)
- b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->Username + "</span> left</span></i>");
+ b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->GetUsername() + "</span> left</span></i>");
else
- b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->Username + "</span> removed <span color='#eeeeee'>" + added.Username + "</span></span></i>");
+ b->insert_markup(s, "<i><span color='#999999'><span color='#eeeeee'>" + adder->GetUsername() + "</span> removed <span color='#eeeeee'>" + added.GetUsername() + "</span></span></i>");
} break;
case MessageType::CHANNEL_NAME_CHANGE: {
const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
- b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " changed the name to <b>" + Glib::Markup::escape_text(data->Content) + "</b></span></i>");
+ b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " changed the name to <b>" + Glib::Markup::escape_text(data->Content) + "</b></span></i>");
} break;
case MessageType::CHANNEL_ICON_CHANGE: {
const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
- b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " changed the channel icon</span></i>");
+ b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " changed the channel icon</span></i>");
} break;
case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1:
case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2:
case MessageType::USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3: {
const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
const auto guild = Abaddon::Get().GetDiscordClient().GetGuild(*data->GuildID);
- b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " just boosted the server <b>" + Glib::Markup::escape_text(data->Content) + "</b> times! " +
+ b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " just boosted the server <b>" + Glib::Markup::escape_text(data->Content) + "</b> times! " +
Glib::Markup::escape_text(guild->Name) + " has achieved <b>Level " + std::to_string(static_cast<int>(data->Type) - 8) + "!</b></span></i>"); // oo cheeky me !!!
} break;
case MessageType::CHANNEL_FOLLOW_ADD: {
const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
- b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " has added <b>" + Glib::Markup::escape_text(data->Content) + "</b> to this channel. Its most important updates will show up here.</span></i>");
+ b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " has added <b>" + Glib::Markup::escape_text(data->Content) + "</b> to this channel. Its most important updates will show up here.</span></i>");
} break;
case MessageType::CALL: {
b->insert_markup(s, "<span color='#999999'><i>[started a call]</i></span>");
@@ -270,13 +270,13 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) {
case MessageType::THREAD_CREATED: {
const auto author = Abaddon::Get().GetDiscordClient().GetUser(data->Author.ID);
if (data->MessageReference.has_value() && data->MessageReference->ChannelID.has_value()) {
- auto iter = b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " started a thread: </span></i>");
+ auto iter = b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " started a thread: </span></i>");
auto tag = b->create_tag();
tag->property_weight() = Pango::WEIGHT_BOLD;
m_channel_tagmap[tag] = *data->MessageReference->ChannelID;
b->insert_with_tag(iter, data->Content, tag);
} else {
- b->insert_markup(s, "<i><span color='#999999'>" + author->GetEscapedBoldName() + " started a thread: </span><b>" + Glib::Markup::escape_text(data->Content) + "</b></i>");
+ b->insert_markup(s, "<i><span color='#999999'>" + author->GetDisplayNameEscapedBold() + " started a thread: </span><b>" + Glib::Markup::escape_text(data->Content) + "</b></i>");
}
} break;
default: break;
@@ -656,7 +656,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
if (role.has_value()) {
const auto author = discord.GetUser(author_id);
if (author.has_value()) {
- return "<b><span color=\"#" + IntToCSSColor(role->Color) + "\">" + author->GetEscapedString() + "</span></b>";
+ return "<b><span color=\"#" + IntToCSSColor(role->Color) + "\">" + author->GetDisplayNameEscaped(guild_id) + "</span></b>";
}
}
}
@@ -664,7 +664,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
const auto author = discord.GetUser(author_id);
if (author.has_value()) {
- return author->GetEscapedBoldString<false>();
+ return author->GetDisplayNameEscapedBold(guild_id);
}
return "<b>Unknown User</b>";
@@ -685,7 +685,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data)
Glib::Markup::escape_text(data.Interaction->Name) +
"</span>");
} else if (const auto user = discord.GetUser(data.Interaction->User.ID); user.has_value()) {
- lbl->set_markup(user->GetEscapedBoldString<false>());
+ lbl->set_markup(user->GetDisplayNameEscapedBold());
} else {
lbl->set_markup("<b>Unknown User</b>");
}
@@ -1043,7 +1043,7 @@ void ChatMessageHeader::UpdateName() {
else
m_author.set_markup("<span weight='bold'>" + name + "</span>");
} else
- m_author.set_markup("<span weight='bold'>" + user->GetEscapedName() + "</span>");
+ m_author.set_markup("<span weight='bold'>" + user->GetDisplayNameEscaped() + "</span>");
}
std::vector<Gtk::Widget *> ChatMessageHeader::GetChildContent() {
@@ -1069,7 +1069,7 @@ Glib::ustring ChatMessageHeader::GetEscapedDisplayName(const UserData &user, con
if (member.has_value() && !member->Nickname.empty())
return Glib::Markup::escape_text(member->Nickname);
else
- return Glib::Markup::escape_text(user.GetEscapedName());
+ return Glib::Markup::escape_text(user.GetDisplayNameEscaped());
}
bool ChatMessageHeader::on_author_button_press(GdkEventButton *ev) {
diff --git a/src/components/chatwindow.cpp b/src/components/chatwindow.cpp
index 1565d0c..e51d491 100644
--- a/src/components/chatwindow.cpp
+++ b/src/components/chatwindow.cpp
@@ -301,7 +301,7 @@ void ChatWindow::StartReplying(Snowflake message_id) {
m_is_replying = true;
m_input->StartReplying();
if (author.has_value())
- m_input_indicator->SetCustomMarkup("Replying to " + author->GetEscapedBoldString<false>());
+ m_input_indicator->SetCustomMarkup("Replying to " + author->GetUsernameEscapedBold());
else
m_input_indicator->SetCustomMarkup("Replying...");
}
diff --git a/src/components/completer.cpp b/src/components/completer.cpp
index c6a5a08..f6f0906 100644
--- a/src/components/completer.cpp
+++ b/src/components/completer.cpp
@@ -117,12 +117,13 @@ void Completer::CompleteMentions(const Glib::ustring &term) {
if (id == me) continue;
const auto author = discord.GetUser(id);
if (!author.has_value()) continue;
+ // todo improve the predicate here
if (!StringContainsCaseless(author->Username, term)) continue;
if (i++ > 15) break;
auto entry = CreateEntry(author->GetMention());
- entry->SetText(author->Username + "#" + author->Discriminator);
+ entry->SetText(author->GetUsername());
if (channel_id.IsValid()) {
const auto chan = discord.GetChannel(channel_id);
diff --git a/src/components/friendslist.cpp b/src/components/friendslist.cpp
index d8a566f..99fbafa 100644
--- a/src/components/friendslist.cpp
+++ b/src/components/friendslist.cpp
@@ -117,16 +117,16 @@ void FriendsList::OnActionRemove(Snowflake id) {
Glib::ustring str;
switch (*discord.GetRelationship(id)) {
case RelationshipType::Blocked:
- str = "Are you sure you want to unblock " + user->Username + "#" + user->Discriminator + "?";
+ str = "Are you sure you want to unblock " + user->GetUsername() + "?";
break;
case RelationshipType::Friend:
- str = "Are you sure you want to remove " + user->Username + "#" + user->Discriminator + "?";
+ str = "Are you sure you want to remove " + user->GetUsername() + "?";
break;
case RelationshipType::PendingIncoming:
- str = "Are you sure you want to ignore " + user->Username + "#" + user->Discriminator + "?";
+ str = "Are you sure you want to ignore " + user->GetUsername() + "?";
break;
case RelationshipType::PendingOutgoing:
- str = "Are you sure you want to cancel your request to " + user->Username + "#" + user->Discriminator + "?";
+ str = "Are you sure you want to cancel your request to " + user->GetUsername() + "?";
break;
default:
break;
@@ -244,7 +244,7 @@ bool FriendsListAddComponent::OnKeyPress(GdkEventKey *e) {
FriendsListFriendRow::FriendsListFriendRow(RelationshipType type, const UserData &data)
: ID(data.ID)
, Type(type)
- , Name(data.Username + "#" + data.Discriminator)
+ , Name(data.GetUsername())
, Status(Abaddon::Get().GetDiscordClient().GetUserStatus(data.ID))
, m_accept("Accept") {
auto *ev = Gtk::manage(new Gtk::EventBox);
@@ -265,7 +265,7 @@ FriendsListFriendRow::FriendsListFriendRow(RelationshipType type, const UserData
img->SetURL(data.GetAvatarURL("png", "32"));
}
- namelbl->set_markup(data.GetEscapedBoldName());
+ namelbl->set_markup(data.GetDisplayNameEscapedBold());
UpdatePresenceLabel();
diff --git a/src/components/memberlist.cpp b/src/components/memberlist.cpp
index 19b4fb8..975b527 100644
--- a/src/components/memberlist.cpp
+++ b/src/components/memberlist.cpp
@@ -37,9 +37,17 @@ MemberListUserRow::MemberListUserRow(const std::optional<GuildData> &guild, cons
m_label->set_single_line_mode(true);
m_label->set_ellipsize(Pango::ELLIPSIZE_END);
- std::string display = data.Username;
- if (Abaddon::Get().GetSettings().ShowMemberListDiscriminators)
- display += "#" + data.Discriminator;
+ // todo remove after migration complete
+ std::string display;
+ if (data.IsPomelo()) {
+ display = data.GetDisplayName(guild.has_value() ? guild->ID : Snowflake::Invalid);
+ } else {
+ display = data.Username;
+ if (Abaddon::Get().GetSettings().ShowMemberListDiscriminators) {
+ display += "#" + data.Discriminator;
+ }
+ }
+
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;