code cleanup in AxolotlService.fetchDeviceIds()

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java | 54 
1 file changed, 29 insertions(+), 25 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/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);
 							}
 						}
 					}
-				});
-			}
+				}
+			});
 		}
 	}