From db05d264334b548ce2f307d614e39aabd775bb4f Mon Sep 17 00:00:00 2001 From: Andreas Straub Date: Wed, 22 Jul 2015 15:02:53 +0200 Subject: Always build own device session automatically --- .../conversations/crypto/axolotl/AxolotlService.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java index c30a7ab8..c6f74538 100644 --- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java +++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java @@ -803,8 +803,16 @@ public class AxolotlService { } public void registerDevices(final Jid jid, @NonNull final Set deviceIds) { - if(deviceIds.contains(getOwnDeviceId())) { - deviceIds.remove(getOwnDeviceId()); + if(jid.toBareJid().equals(account.getJid().toBareJid())) { + if (deviceIds.contains(getOwnDeviceId())) { + deviceIds.remove(getOwnDeviceId()); + } + for(Integer deviceId : deviceIds) { + AxolotlAddress ownDeviceAddress = new AxolotlAddress(jid.toBareJid().toString(),deviceId); + if(sessions.get(ownDeviceAddress) == null) { + buildSessionFromPEP(null, ownDeviceAddress, false); + } + } } Set expiredDevices = new HashSet<>(axolotlStore.getSubDeviceSessions(jid.toBareJid().toString())); expiredDevices.removeAll(deviceIds); @@ -976,11 +984,10 @@ public class AxolotlService { Log.d(Config.LOGTAG, AxolotlService.getLogprefix(account)+"Retrieving bundle: " + bundlesPacket); mXmppConnectionService.sendIqPacket(account, bundlesPacket, new OnIqPacketReceived() { private void finish() { - AxolotlAddress ownAddress = new AxolotlAddress(conversation.getAccount().getJid().toBareJid().toString(),0); - AxolotlAddress foreignAddress = new AxolotlAddress(conversation.getJid().toBareJid().toString(),0); + AxolotlAddress ownAddress = new AxolotlAddress(account.getJid().toBareJid().toString(),0); if (!fetchStatusMap.getAll(ownAddress).containsValue(FetchStatus.PENDING) - && !fetchStatusMap.getAll(foreignAddress).containsValue(FetchStatus.PENDING)) { - if (flushWaitingQueueAfterFetch) { + && !fetchStatusMap.getAll(address).containsValue(FetchStatus.PENDING)) { + if (flushWaitingQueueAfterFetch && conversation != null) { conversation.findUnsentMessagesWithEncryption(Message.ENCRYPTION_AXOLOTL, new Conversation.OnMessageFound() { @Override -- cgit v1.2.3