From a2f63a7789aca9e05e5dfd1a9c2838e31aefe60d Mon Sep 17 00:00:00 2001 From: fiaxh Date: Thu, 14 Nov 2019 16:19:10 +0100 Subject: [PATCH] Parse offline member info from MUC presence Fixes OMEMO only encrypting to new member after restart and private MUC name only updating after restart --- main/src/ui/occupant_menu/list.vala | 2 +- xmpp-vala/src/module/xep/0045_muc/flag.vala | 2 +- xmpp-vala/src/module/xep/0045_muc/module.vala | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/main/src/ui/occupant_menu/list.vala b/main/src/ui/occupant_menu/list.vala index 4abc3636..c422a899 100644 --- a/main/src/ui/occupant_menu/list.vala +++ b/main/src/ui/occupant_menu/list.vala @@ -71,7 +71,7 @@ public class List : Box { } private void on_show_received(Show show, Jid jid, Account account) { - if (conversation != null && conversation.counterpart.equals_bare(jid)) { + if (conversation != null && conversation.counterpart.equals_bare(jid) && jid.is_full()) { if (show.as == Show.OFFLINE && rows.has_key(jid)) { remove_occupant(jid); } else if (show.as != Show.OFFLINE && !rows.has_key(jid)) { diff --git a/xmpp-vala/src/module/xep/0045_muc/flag.vala b/xmpp-vala/src/module/xep/0045_muc/flag.vala index 87e0930f..c6c2ef3b 100644 --- a/xmpp-vala/src/module/xep/0045_muc/flag.vala +++ b/xmpp-vala/src/module/xep/0045_muc/flag.vala @@ -72,7 +72,7 @@ public class Flag : XmppStreamFlag { internal void set_real_jid(Jid full_jid, Jid real_jid) { occupant_real_jids[full_jid] = real_jid; } internal void set_offline_member(Jid muc_jid, Jid real_jid, Affiliation affiliation) { - set_affiliation(muc_jid.bare_jid, real_jid, affiliation); + set_affiliation(muc_jid.bare_jid, real_jid.bare_jid, affiliation); } internal void set_affiliation(Jid muc_jid, Jid full_jid, Affiliation affiliation) { diff --git a/xmpp-vala/src/module/xep/0045_muc/module.vala b/xmpp-vala/src/module/xep/0045_muc/module.vala index db7a299f..85c78266 100644 --- a/xmpp-vala/src/module/xep/0045_muc/module.vala +++ b/xmpp-vala/src/module/xep/0045_muc/module.vala @@ -282,8 +282,9 @@ public class Module : XmppStreamModule { } } string? affiliation_str = x_node.get_deep_attribute("item", "affiliation"); + Affiliation? affiliation = null; if (affiliation_str != null) { - Affiliation affiliation = parse_affiliation(affiliation_str); + affiliation = parse_affiliation(affiliation_str); flag.set_affiliation(presence.from.bare_jid, presence.from, affiliation); received_occupant_affiliation(stream, presence.from, affiliation); } @@ -291,6 +292,9 @@ public class Module : XmppStreamModule { if (jid_ != null) { Jid? jid = Jid.parse(jid_); flag.set_real_jid(presence.from, jid); + if (affiliation != null) { + stream.get_flag(Flag.IDENTITY).set_offline_member(presence.from, jid, affiliation); + } received_occupant_jid(stream, presence.from, jid); } string? role_str = x_node.get_deep_attribute("item", "role");