diff options
Diffstat (limited to 'src/com/isode/stroke/disco/EntityCapsManager.java')
-rw-r--r-- | src/com/isode/stroke/disco/EntityCapsManager.java | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/src/com/isode/stroke/disco/EntityCapsManager.java b/src/com/isode/stroke/disco/EntityCapsManager.java index a41ec11..6fb201c 100644 --- a/src/com/isode/stroke/disco/EntityCapsManager.java +++ b/src/com/isode/stroke/disco/EntityCapsManager.java @@ -4,7 +4,7 @@ */ package com.isode.stroke.disco; -import java.util.HashMap; +import java.util.TreeMap; import java.util.Map; import com.isode.stroke.client.StanzaChannel; @@ -17,11 +17,10 @@ import com.isode.stroke.signals.Slot1; public class EntityCapsManager extends EntityCapsProvider { private final CapsProvider capsProvider; - private final Map<JID, String> caps = new HashMap<JID, String>(); + private final Map<JID, String> caps = new TreeMap<JID, String>(); public EntityCapsManager(CapsProvider capsProvider, StanzaChannel stanzaChannel) { this.capsProvider = capsProvider; - stanzaChannel.onPresenceReceived.connect(new Slot1<Presence>() { @Override public void call(Presence p1) { @@ -43,28 +42,28 @@ public class EntityCapsManager extends EntityCapsProvider { } private void handlePresenceReceived(Presence presence) { - JID from = presence.getFrom(); - if (presence.isAvailable()) { - CapsInfo capsInfo = presence.getPayload(new CapsInfo()); - if (capsInfo == null || !capsInfo.getHash().equals("sha-1") || presence.getPayload(new ErrorPayload()) != null) { - return; - } - String hash = capsInfo.getVersion(); - String i = caps.get(from); - if (!hash.equals(i)) { - caps.put(from, hash); - DiscoInfo disco = capsProvider.getCaps(hash); - if (disco != null || i != null) { - onCapsChanged.emit(from); - } - } - } - else { - if (caps.remove(from) != null) { - onCapsChanged.emit(from); - } - } - } + JID from = presence.getFrom(); + if (presence.isAvailable()) { + CapsInfo capsInfo = presence.getPayload(new CapsInfo()); + if (capsInfo == null || !capsInfo.getHash().equals("sha-1") || presence.getPayload(new ErrorPayload()) != null) { + return; + } + String hash = capsInfo.getVersion(); + String i = caps.get(from); + if (!hash.equals(i)) { + caps.put(from, hash); + DiscoInfo disco = capsProvider.getCaps(hash); + if (disco != null || i != null) { + onCapsChanged.emit(from); + } + } + } + else { + if (caps.remove(from) != null) { + onCapsChanged.emit(from); + } + } + } private void handleStanzaChannelAvailableChanged(boolean available) { if (available) { @@ -88,6 +87,6 @@ public class EntityCapsManager extends EntityCapsProvider { if (caps.containsKey(jid)) { return capsProvider.getCaps(caps.get(jid)); } - return new DiscoInfo(); + return null; } } |