diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 7036c9f589e96c2308447c2280cdb2ec327839ab..3654c98e94e8e4d4a0d4f568a9c8e63db1e28620 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -759,6 +759,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece mXmppConnectionService.getAvatarService().clear(conversation); mXmppConnectionService.updateMucRosterUi(); mXmppConnectionService.updateConversationUi(); + Contact contact = user.getContact(); if (!user.getAffiliation().ranks(MucOptions.Affiliation.MEMBER)) { Jid jid = user.getRealJid(); List cryptoTargets = conversation.getAcceptedCryptoTargets(); @@ -767,7 +768,11 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece conversation.setAcceptedCryptoTargets(cryptoTargets); mXmppConnectionService.updateConversation(conversation); } - } else if (isNew && user.getRealJid() != null && account.getAxolotlService().hasEmptyDeviceList(user.getRealJid())) { + } else if (isNew + && user.getRealJid() != null + && conversation.getMucOptions().isPrivateAndNonAnonymous() + && (contact == null || !contact.mutualPresenceSubscription()) + && account.getAxolotlService().hasEmptyDeviceList(user.getRealJid())) { account.getAxolotlService().fetchDeviceIds(user.getRealJid()); } } diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index a05b1aac25c44ee1e451d16a5d5c8a4bab5747a3..4657dbe02da9c534bae5fb42412e27d78fb67750 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -80,7 +80,12 @@ public class PresenceParser extends AbstractParser implements } boolean isNew = mucOptions.updateUser(user); final AxolotlService axolotlService = conversation.getAccount().getAxolotlService(); - if (isNew && user.getRealJid() != null && mucOptions.isPrivateAndNonAnonymous() && axolotlService.hasEmptyDeviceList(user.getRealJid())) { + Contact contact = user.getContact(); + if (isNew + && user.getRealJid() != null + && mucOptions.isPrivateAndNonAnonymous() + && (contact == null || !contact.mutualPresenceSubscription()) + && axolotlService.hasEmptyDeviceList(user.getRealJid())) { axolotlService.fetchDeviceIds(user.getRealJid()); } if (codes.contains(MucOptions.STATUS_CODE_ROOM_CREATED) && mucOptions.autoPushConfiguration()) {