From a2a45757e917aa97e71cf0b84a01dc843759a5f6 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Sat, 26 Mar 2022 02:51:56 -0400 Subject: handle nicknames for message headers --- src/components/chatmessage.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/components/chatmessage.cpp') diff --git a/src/components/chatmessage.cpp b/src/components/chatmessage.cpp index 2007e1f..823aaa6 100644 --- a/src/components/chatmessage.cpp +++ b/src/components/chatmessage.cpp @@ -1131,11 +1131,10 @@ ChatMessageHeader::ChatMessageHeader(const Message &data) m_avatar.set_valign(Gtk::ALIGN_START); m_avatar.set_margin_right(10); - m_author.set_markup(data.Author.GetEscapedBoldName()); m_author.set_single_line_mode(true); m_author.set_line_wrap(false); m_author.set_ellipsize(Pango::ELLIPSIZE_END); - m_author.set_xalign(0.f); + m_author.set_xalign(0.0F); m_author.set_can_focus(false); m_meta_ev.signal_button_press_event().connect(sigc::mem_fun(*this, &ChatMessageHeader::on_author_button_press)); @@ -1212,30 +1211,32 @@ ChatMessageHeader::ChatMessageHeader(const Message &data) show_all(); auto &discord = Abaddon::Get().GetDiscordClient(); - auto role_update_cb = [this](...) { UpdateNameColor(); }; + auto role_update_cb = [this](...) { UpdateName(); }; discord.signal_role_update().connect(sigc::track_obj(role_update_cb, *this)); - auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateNameColor(); }; + auto guild_member_update_cb = [this](const auto &, const auto &) { UpdateName(); }; discord.signal_guild_member_update().connect(sigc::track_obj(guild_member_update_cb, *this)); - UpdateNameColor(); + UpdateName(); AttachUserMenuHandler(m_meta_ev); AttachUserMenuHandler(m_avatar_ev); } -void ChatMessageHeader::UpdateNameColor() { +void ChatMessageHeader::UpdateName() { const auto &discord = Abaddon::Get().GetDiscordClient(); const auto user = discord.GetUser(UserID); if (!user.has_value()) return; const auto chan = discord.GetChannel(ChannelID); bool is_guild = chan.has_value() && chan->GuildID.has_value(); if (is_guild) { + const auto member = discord.GetMember(UserID, *chan->GuildID); const auto role_id = discord.GetMemberHoistedRole(*chan->GuildID, UserID, true); const auto role = discord.GetRole(role_id); + const auto name = GetEscapedDisplayName(*user, member); std::string md; if (role.has_value()) - m_author.set_markup("" + user->GetEscapedName() + ""); + m_author.set_markup("" + name + ""); else - m_author.set_markup("" + user->GetEscapedName() + ""); + m_author.set_markup("" + name + ""); } else m_author.set_markup("" + user->GetEscapedName() + ""); } @@ -1259,6 +1260,13 @@ void ChatMessageHeader::AttachUserMenuHandler(Gtk::Widget &widget) { }); } +Glib::ustring ChatMessageHeader::GetEscapedDisplayName(const UserData &user, const std::optional &member) { + if (member.has_value() && !member->Nickname.empty()) + return Glib::Markup::escape_text(member->Nickname); + else + return Glib::Markup::escape_text(user.GetEscapedName()); +} + bool ChatMessageHeader::on_author_button_press(GdkEventButton *ev) { if (ev->button == GDK_BUTTON_PRIMARY && (ev->state & GDK_SHIFT_MASK)) { m_signal_action_insert_mention.emit(); -- cgit v1.2.3