From 921f28c84bbda56ec93df7dcde7c828eaabb0b58 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Tue, 31 Jan 2023 14:43:17 +0100 Subject: Fix reaction display in private MUCs --- libdino/src/util/display_name.vala | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'libdino/src/util') diff --git a/libdino/src/util/display_name.vala b/libdino/src/util/display_name.vala index 0c05eda8..d99bc40b 100644 --- a/libdino/src/util/display_name.vala +++ b/libdino/src/util/display_name.vala @@ -30,7 +30,7 @@ namespace Dino { if (conversation.type_ == Conversation.Type.CHAT) { return get_real_display_name(stream_interactor, conversation.account, participant, self_word) ?? participant.bare_jid.to_string(); } - if ((conversation.type_ == Conversation.Type.GROUPCHAT || conversation.type_ == Conversation.Type.GROUPCHAT_PM) && conversation.counterpart.equals_bare(participant)) { + if ((conversation.type_ == Conversation.Type.GROUPCHAT || conversation.type_ == Conversation.Type.GROUPCHAT_PM)) { return get_occupant_display_name(stream_interactor, conversation, participant); } return participant.bare_jid.to_string(); @@ -75,8 +75,13 @@ namespace Dino { public static string get_occupant_display_name(StreamInteractor stream_interactor, Conversation conversation, Jid jid, string? self_word = null, bool muc_real_name = false) { if (muc_real_name) { MucManager muc_manager = stream_interactor.get_module(MucManager.IDENTITY); - if (muc_manager.is_private_room(conversation.account, jid.bare_jid)) { - Jid? real_jid = muc_manager.get_real_jid(jid, conversation.account); + if (muc_manager.is_private_room(conversation.account, conversation.counterpart)) { + Jid? real_jid = null; + if (jid.equals_bare(conversation.counterpart)) { + muc_manager.get_real_jid(jid, conversation.account); + } else { + real_jid = jid; + } if (real_jid != null) { string? display_name = get_real_display_name(stream_interactor, conversation.account, real_jid, self_word); if (display_name != null) return display_name; @@ -92,6 +97,15 @@ namespace Dino { } } + // If it's someone else's real jid, recover nickname + if (!jid.equals_bare(conversation.counterpart)) { + MucManager muc_manager = stream_interactor.get_module(MucManager.IDENTITY); + Jid? occupant_jid = muc_manager.get_occupant_jid(conversation.account, conversation.counterpart.bare_jid, jid); + if (occupant_jid != null && occupant_jid.resourcepart != null) { + return occupant_jid.resourcepart; + } + } + return jid.resourcepart ?? jid.to_string(); } } \ No newline at end of file -- cgit v1.2.3-70-g09d2