diff options
Diffstat (limited to '')
-rw-r--r-- | src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java | 54 |
1 files changed, 29 insertions, 25 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 010dbbceb..0cc823ba3 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java @@ -978,7 +978,8 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { fetchDeviceIds(jid, null); } - public void fetchDeviceIds(final Jid jid, OnDeviceIdsFetched callback) { + private void fetchDeviceIds(final Jid jid, OnDeviceIdsFetched callback) { + IqPacket packet; synchronized (this.fetchDeviceIdsMap) { List<OnDeviceIdsFetched> callbacks = this.fetchDeviceIdsMap.get(jid); if (callbacks != null) { @@ -986,6 +987,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { callbacks.add(callback); } Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": fetching device ids for " + jid + " already running. adding callback"); + packet = null; } else { callbacks = new ArrayList<>(); if (callback != null) { @@ -993,35 +995,37 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { } this.fetchDeviceIdsMap.put(jid, callbacks); Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": fetching device ids for " + jid); - IqPacket packet = mXmppConnectionService.getIqGenerator().retrieveDeviceIds(jid); - mXmppConnectionService.sendIqPacket(account, packet, (account, response) -> { - synchronized (fetchDeviceIdsMap) { - List<OnDeviceIdsFetched> callbacks1 = fetchDeviceIdsMap.remove(jid); - if (response.getType() == IqPacket.TYPE.RESULT) { - fetchDeviceListStatus.put(jid, true); - Element item = mXmppConnectionService.getIqParser().getItem(response); - Set<Integer> deviceIds = mXmppConnectionService.getIqParser().deviceIds(item); - registerDevices(jid, deviceIds); - if (callbacks1 != null) { - for (OnDeviceIdsFetched callback1 : callbacks1) { - callback1.fetched(jid, deviceIds); - } + packet = mXmppConnectionService.getIqGenerator().retrieveDeviceIds(jid); + } + } + if (packet != null) { + mXmppConnectionService.sendIqPacket(account, packet, (account, response) -> { + synchronized (fetchDeviceIdsMap) { + List<OnDeviceIdsFetched> callbacks = fetchDeviceIdsMap.remove(jid); + if (response.getType() == IqPacket.TYPE.RESULT) { + fetchDeviceListStatus.put(jid, true); + Element item = mXmppConnectionService.getIqParser().getItem(response); + Set<Integer> deviceIds = mXmppConnectionService.getIqParser().deviceIds(item); + registerDevices(jid, deviceIds); + if (callbacks != null) { + for (OnDeviceIdsFetched c : callbacks) { + c.fetched(jid, deviceIds); } + } + } else { + if (response.getType() == IqPacket.TYPE.TIMEOUT) { + fetchDeviceListStatus.remove(jid); } else { - if (response.getType() == IqPacket.TYPE.TIMEOUT) { - fetchDeviceListStatus.remove(jid); - } else { - fetchDeviceListStatus.put(jid, false); - } - if (callbacks1 != null) { - for (OnDeviceIdsFetched callback1 : callbacks1) { - callback1.fetched(jid, null); - } + fetchDeviceListStatus.put(jid, false); + } + if (callbacks != null) { + for (OnDeviceIdsFetched c : callbacks) { + c.fetched(jid, null); } } } - }); - } + } + }); } } |