When I change the name of a User, the roster of its friends is not updated when the roster is built using groups.
Investigating why, I discovered that it happens because the cache is not update.
So I did this fix to update all friends roster:
β a/src/java/org/jivesoftware/openfire/roster/RosterManager.java
+++ b/src/java/org/jivesoftware/openfire/roster/RosterManager.java
@@ -591,8 +591,23 @@ public class RosterManager extends BasicModule implements GroupEventListener, Us
deleteRoster(userJID);
}
-
public void userModified(User user, Map<String,Object> params) {
-
//Do nothing
-
public void userModified(User user, Map<String, Object> params) {
-
if ("nameModified".equals(params.get("type"))) {
-
for (Group group : getSharedGroups(user.getUsername())) {
-
ArrayList<JID> groupUsers = new ArrayList<>();
-
groupUsers.addAll(group.getAdmins());
-
groupUsers.addAll(group.getMembers());
-
for (JID groupUser : groupUsers) {
-
String groupUsername = groupUser.getNode();
-
synchronized ((groupUsername + " ro").intern()) {
-
rosterCache.remove(groupUsername);
-
}
-
}
-
}
-
}
}