aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/parser/PresenceParser.java
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel@gultsch.de>2016-02-03 10:40:02 +0100
committerDaniel Gultsch <daniel@gultsch.de>2016-02-03 10:40:02 +0100
commitf0798216d568bca30051ba5392263da31e78eb98 (patch)
tree11e55953a1d71d1a15d06e88cfc65e7c20bdb29b /src/main/java/eu/siacs/conversations/parser/PresenceParser.java
parent4a1a59f0c8ce99fd42909fb472179daec5065625 (diff)
refactored disco cache. avoid making duplicate call. check hash
Diffstat (limited to 'src/main/java/eu/siacs/conversations/parser/PresenceParser.java')
-rw-r--r--src/main/java/eu/siacs/conversations/parser/PresenceParser.java33
1 files changed, 7 insertions, 26 deletions
diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java
index 5a25b283..2e706ff7 100644
--- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java
+++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java
@@ -170,7 +170,7 @@ public class PresenceParser extends AbstractParser implements
final String type = packet.getAttribute("type");
final Contact contact = account.getRoster().getContact(from);
if (type == null) {
- final String presence = from.isBareJid() ? "" : from.getResourcepart();
+ final String resource = from.isBareJid() ? "" : from.getResourcepart();
contact.setPresenceName(packet.findChildContent("nick", "http://jabber.org/protocol/nick"));
Avatar avatar = Avatar.parsePresence(packet.findChild("x", "vcard-temp:x:update"));
if (avatar != null && !contact.isSelf()) {
@@ -187,31 +187,12 @@ public class PresenceParser extends AbstractParser implements
}
int sizeBefore = contact.getPresences().size();
- ServiceDiscoveryResult disco = null;
- Element caps = packet.findChild("c", "http://jabber.org/protocol/caps");
-
- if (caps != null) {
- disco = mXmppConnectionService.databaseBackend.
- findDiscoveryResult(caps.getAttribute("hash"), caps.getAttribute("ver"));
- }
-
- if (disco != null || caps == null) {
- contact.updatePresence(presence, new Presence(packet.findChild("show"), disco));
- } else {
- IqPacket request = new IqPacket(IqPacket.TYPE.GET);
- request.setTo(from);
- request.query("http://jabber.org/protocol/disco#info");
-
- mXmppConnectionService.sendIqPacket(account, request, new OnIqPacketReceived() {
- @Override
- public void onIqPacketReceived(Account account, IqPacket discoPacket) {
- if (discoPacket.getType() == IqPacket.TYPE.RESULT) {
- ServiceDiscoveryResult disco = new ServiceDiscoveryResult(discoPacket);
- contact.updatePresence(presence, new Presence(packet.findChild("show"), disco));
- mXmppConnectionService.databaseBackend.insertDiscoveryResult(disco);
- }
- }
- });
+ final Element show = packet.findChild("show");
+ final Element caps = packet.findChild("c", "http://jabber.org/protocol/caps");
+ final Presence presence = Presence.parse(show, caps);
+ contact.updatePresence(resource, presence);
+ if (presence.hasCaps() && Config.REQUEST_DISCO) {
+ mXmppConnectionService.fetchCaps(account, from, presence);
}
PgpEngine pgp = mXmppConnectionService.getPgpEngine();