From 9eb1e2c8ab4e20d075b43f82820a72cb269b865a Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Sun, 26 Jul 2026 12:43:55 +0300 Subject: [PATCH] XEP0392Utils: add colors cache --- .../spark/ui/rooms/GroupChatRoom.java | 10 ++-------- .../org/jivesoftware/spark/util/XEP0392Utils.java | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/jivesoftware/spark/ui/rooms/GroupChatRoom.java b/core/src/main/java/org/jivesoftware/spark/ui/rooms/GroupChatRoom.java index e7224c2c5..9e9de24b4 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/rooms/GroupChatRoom.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/rooms/GroupChatRoom.java @@ -83,7 +83,6 @@ public class GroupChatRoom extends ChatRoom { private final MultiUserChat chat; private final SubjectPanel subjectPanel; private final List currentUserList = new ArrayList<>(); - private final Map participantColors = new HashMap<>(); private final List blockedUsers = new ArrayList<>(); private final GroupChatParticipantList roomInfo; private final RolloverButton settings; @@ -607,9 +606,6 @@ public class GroupChatRoom extends ChatRoom { scrollToBottom(); } currentUserList.remove(from); - synchronized (participantColors) { - participantColors.remove(from.getResourcepart()); - } } } } else { @@ -963,10 +959,8 @@ public class GroupChatRoom extends ChatRoom { if (!pref.isMucRandomColors()) { return ChatManager.FROM_COLOR; } - synchronized (participantColors) { - Color userColor = participantColors.computeIfAbsent(nickname, XEP0392Utils::colorOfMucParticipant); - return userColor; - } + Color userColor = XEP0392Utils.colorOfMucParticipant(nickname); + return userColor; } public void notifySettingsAccessRight() { diff --git a/core/src/main/java/org/jivesoftware/spark/util/XEP0392Utils.java b/core/src/main/java/org/jivesoftware/spark/util/XEP0392Utils.java index 993877f71..0763777b4 100644 --- a/core/src/main/java/org/jivesoftware/spark/util/XEP0392Utils.java +++ b/core/src/main/java/org/jivesoftware/spark/util/XEP0392Utils.java @@ -3,22 +3,31 @@ package org.jivesoftware.spark.util; import org.jivesoftware.smackx.colors.ConsistentColor; import org.jxmpp.jid.BareJid; import org.jxmpp.jid.EntityBareJid; +import org.jxmpp.jid.Jid; import org.jxmpp.jid.parts.Resourcepart; import java.awt.Color; +import java.util.Map; +import java.util.WeakHashMap; public class XEP0392Utils { + private static final Map jidColors = new WeakHashMap<>(64); + private static final Map participantColors = new WeakHashMap<>(64); public static Color colorOfMucParticipant(Resourcepart userNickname) { - return toColor(ConsistentColor.RGBFrom(userNickname)); + return participantColors.computeIfAbsent(userNickname, it -> toColor(ConsistentColor.RGBFrom(it))); } public static Color colorOfMuc(EntityBareJid mucJid) { - return toColor(ConsistentColor.RGBFrom(mucJid)); + return getColorOfJid(mucJid); } public static Color colorOfContact(BareJid contactJid) { - return toColor(ConsistentColor.RGBFrom(contactJid)); + return getColorOfJid(contactJid); + } + + private static Color getColorOfJid(Jid jid) { + return jidColors.computeIfAbsent(jid, it -> toColor(ConsistentColor.RGBFrom(it))); } private static Color toColor(float[] rgb) {