diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2015-12-04 22:03:46 +0100 |
---|---|---|
committer | Christian S <christian@pix-art.de> | 2015-12-06 10:57:32 +0100 |
commit | ef9cca53993ceb5c820e2a50b8069c796c301293 (patch) | |
tree | ccd7103fc990ee7e8b9af3c52b6347a34321254d /src/main/java | |
parent | ef97ce119a92355236a49aeccec81872a7452141 (diff) |
parse stanza-id from messages
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/eu/siacs/conversations/parser/MessageParser.java | 22 | ||||
-rw-r--r-- | src/main/java/eu/siacs/conversations/xml/Element.java | 4 |
2 files changed, 23 insertions, 3 deletions
diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 3e923af1c..137cd4561 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -163,6 +163,17 @@ public class MessageParser extends AbstractParser implements return null; } + private static String extractStanzaId(Element packet, Jid by) { + for(Element child : packet.getChildren()) { + if (child.getName().equals("stanza-id") + && "urn:xmpp:sid:0".equals(child.getNamespace()) + && by.equals(child.getAttributeAsJid("by"))) { + return child.getAttribute("id"); + } + } + return null; + } + private void parseEvent(final Element event, final Jid from, final Account account) { Element items = event.findChild("items"); String node = items == null ? null : items.getAttribute("node"); @@ -355,6 +366,11 @@ public class MessageParser extends AbstractParser implements } else { message = new Message(conversation, body, Message.ENCRYPTION_NONE, status); } + + if (serverMsgId == null) { + serverMsgId = extractStanzaId(packet, isTypeGroupChat ? conversation.getJid().toBareJid() : account.getServer()); + } + message.setCounterpart(counterpart); message.setRemoteMsgId(remoteMsgId); message.setServerMsgId(serverMsgId); @@ -379,11 +395,11 @@ public class MessageParser extends AbstractParser implements Log.d(Config.LOGTAG,"skipping duplicate message from "+message.getCounterpart().toString()+" "+message.getBody()); return; } + + conversation.add(message); if (query != null) { query.incrementMessageCount(); - } - conversation.add(message); - if (serverMsgId == null) { + } else { if (status == Message.STATUS_SEND || status == Message.STATUS_SEND_RECEIVED) { mXmppConnectionService.markRead(conversation); account.activateGracePeriod(); diff --git a/src/main/java/eu/siacs/conversations/xml/Element.java b/src/main/java/eu/siacs/conversations/xml/Element.java index e82c446bd..34794be1b 100644 --- a/src/main/java/eu/siacs/conversations/xml/Element.java +++ b/src/main/java/eu/siacs/conversations/xml/Element.java @@ -182,4 +182,8 @@ public class Element { String attr = getAttribute(name); return (attr != null && (attr.equalsIgnoreCase("true") || attr.equalsIgnoreCase("1"))); } + + public String getNamespace() { + return getAttribute("xmlns"); + } } |