Change summary
src/main/java/eu/siacs/conversations/entities/MucOptions.java | 20 ++
src/main/java/eu/siacs/conversations/parser/PresenceParser.java | 2
src/main/java/eu/siacs/conversations/services/AvatarService.java | 8
3 files changed, 27 insertions(+), 3 deletions(-)
Detailed changes
@@ -862,6 +862,23 @@ public class MucOptions {
this.occupantId = occupantId;
this.nick = nick;
this.hats = hats;
+
+ if (occupantId != null && options != null) {
+ final var sha1sum = options.getConversation().getAttribute("occupantAvatar/" + occupantId);
+ if (sha1sum != null) {
+ avatar = new Avatar();
+ avatar.sha1sum = sha1sum;
+ avatar.owner = fullJid;
+ }
+
+ if (nick == null) {
+ this.nick = options.getConversation().getAttribute("occupantNick/" + occupantId);
+ } else if (!getNick().equals(getName())) {
+ options.getConversation().setAttribute("occupantNick/" + occupantId, nick);
+ } else {
+ options.getConversation().setAttribute("occupantNick/" + occupantId, (String) null);
+ }
+ }
}
public String getName() {
@@ -933,6 +950,9 @@ public class MucOptions {
}
public boolean setAvatar(Avatar avatar) {
+ if (occupantId != null) {
+ options.getConversation().setAttribute("occupantAvatar/" + occupantId, getContact() == null ? avatar.sha1sum : null);
+ }
if (this.avatar != null && this.avatar.equals(avatar)) {
return false;
} else {
@@ -211,7 +211,7 @@ public class PresenceParser extends AbstractParser implements OnPresencePacketRe
mucOptions.updateUser(parseItem(conversation, item, from, occupantId, nick == null ? null : nick.getContent(), hats));
}
MucOptions.User user = mucOptions.deleteUser(from);
- if (user != null) {
+ if (user != null && occupantId == null) {
mXmppConnectionService.getAvatarService().clear(user);
}
}
@@ -270,7 +270,9 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
'\0' +
user.getAccount().getJid().asBareJid() +
'\0' +
- emptyOnNull(user.getFullJid()) +
+ user.getMuc() +
+ '\0' +
+ user.getOccupantId() == null ? emptyOnNull(user.getFullJid()) : user.getOccupantId() +
'\0' +
emptyOnNull(user.getRealJid()) +
'\0' +
@@ -493,7 +495,9 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
final MucOptions mucOptions = ((Conversation) conversation).getMucOptions();
MucOptions.User user;
if (trueCounterpart != null) {
- user = mucOptions.findOrCreateUserByRealJid(trueCounterpart, message.getCounterpart(), null);
+ user = mucOptions.findOrCreateUserByRealJid(trueCounterpart, message.getCounterpart(), message.getOccupantId());
+ } else if(message.getOccupantId() != null) {
+ user = mucOptions.findUserByOccupantId(message.getOccupantId(), message.getCounterpart());
} else {
user = mucOptions.findUserByFullJid(message.getCounterpart());
}