summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/disco/EntityCapsManager.java')
-rw-r--r--src/com/isode/stroke/disco/EntityCapsManager.java51
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;
}
}