parse stanza-id from messages
This commit is contained in:
parent
cd9a29718b
commit
41dcd8005b
|
@ -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();
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue