diff options
Diffstat (limited to 'src/main/java/de/pixart/messenger/crypto/axolotl')
-rw-r--r-- | src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java index 3ebc6e06f..4e293c9a1 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java @@ -647,14 +647,38 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { }); } + public enum AxolotlCapability { + FULL, + MISSING_PRESENCE, + MISSING_KEYS, + WRONG_CONFIGURATION, + NO_MEMBERS + } + public boolean isConversationAxolotlCapable(Conversation conversation) { + return isConversationAxolotlCapableDetailed(conversation).first == AxolotlCapability.FULL; + } + + public Pair<AxolotlCapability,Jid> isConversationAxolotlCapableDetailed(Conversation conversation) { final List<Jid> jids = getCryptoTargets(conversation); for(Jid jid : jids) { if (!hasAny(jid) && (!deviceIds.containsKey(jid) || deviceIds.get(jid).isEmpty())) { - return false; + if (conversation.getAccount().getRoster().getContact(jid).trusted()) { + return new Pair<>(AxolotlCapability.MISSING_KEYS,jid); + } else { + return new Pair<>(AxolotlCapability.MISSING_PRESENCE,jid); + } + } + } + if (jids.size() > 0) { + return new Pair<>(AxolotlCapability.FULL, null); + } else { + if (conversation.getMucOptions().membersOnly() && conversation.getMucOptions().nonanonymous()) { + return new Pair<>(AxolotlCapability.NO_MEMBERS, null); + } else { + return new Pair<>(AxolotlCapability.WRONG_CONFIGURATION, null); } } - return jids.size() > 0; } public List<Jid> getCryptoTargets(Conversation conversation) { |