From 230c9dbead61f707e975a14a63680caf353c9993 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Tue, 29 Nov 2016 21:43:29 +0100 Subject: better handle the case when same user is joined with multiple nicks in the same room --- .../de/pixart/messenger/entities/MucOptions.java | 31 +++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'src/main/java/de/pixart/messenger/entities') diff --git a/src/main/java/de/pixart/messenger/entities/MucOptions.java b/src/main/java/de/pixart/messenger/entities/MucOptions.java index a95debd89..8ec3cbfd4 100644 --- a/src/main/java/de/pixart/messenger/entities/MucOptions.java +++ b/src/main/java/de/pixart/messenger/entities/MucOptions.java @@ -394,10 +394,18 @@ public class MucOptions { if (user != null) { synchronized (users) { users.remove(user); - if (membersOnly() && - nonanonymous() && - user.affiliation.ranks(Affiliation.MEMBER) && - user.realJid != null) { + boolean realJidInMuc = false; + for (User u : users) { + if (user.realJid != null && user.realJid.equals(u.realJid)) { + realJidInMuc = true; + break; + } + } + if (membersOnly() + && nonanonymous() + && user.affiliation.ranks(Affiliation.MEMBER) + && user.realJid != null + && !realJidInMuc) { user.role = Role.NONE; user.avatar = null; user.fullJid = null; @@ -507,8 +515,19 @@ public class MucOptions { } public List getUsers(int max) { - ArrayList users = getUsers(); - return users.subList(0, Math.min(max, users.size())); + ArrayList subset = new ArrayList<>(); + HashSet jids = new HashSet<>(); + synchronized (users) { + for(User user : users) { + if (user.getRealJid() == null || jids.add(user.getRealJid())) { + subset.add(user); + } + if (subset.size() >= max) { + break; + } + } + } + return subset; } public int getUserCount() { -- cgit v1.2.3