put xep333 parsing into parser class
This commit is contained in:
parent
476ab656ef
commit
246776067a
|
@ -34,7 +34,7 @@ public abstract class AbstractParser {
|
|||
}
|
||||
}
|
||||
|
||||
protected void updateLastseen(Element packet, Account account) {
|
||||
protected void updateLastseen(Element packet, Account account, boolean presenceOverwrite) {
|
||||
String[] fromParts = packet.getAttribute("from").split("/");
|
||||
String from = fromParts[0];
|
||||
String presence = null;
|
||||
|
@ -45,7 +45,7 @@ public abstract class AbstractParser {
|
|||
long timestamp = getTimestamp(packet);
|
||||
if (timestamp >= contact.lastseen.time) {
|
||||
contact.lastseen.time = timestamp;
|
||||
if (presence!=null) {
|
||||
if ((presence!=null)&&(presenceOverwrite)) {
|
||||
contact.lastseen.presence = presence;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ public class MessageParser extends AbstractParser {
|
|||
Conversation conversation = mXmppConnectionService
|
||||
.findOrCreateConversation(account, fromParts[0], false);
|
||||
conversation.setLatestMarkableMessageId(getMarkableMessageId(packet));
|
||||
updateLastseen(packet, account);
|
||||
updateLastseen(packet, account,true);
|
||||
String pgpBody = getPgpBody(packet);
|
||||
if (pgpBody != null) {
|
||||
return new Message(conversation, packet.getFrom(), pgpBody,
|
||||
|
@ -42,7 +42,7 @@ public class MessageParser extends AbstractParser {
|
|||
String[] fromParts = packet.getFrom().split("/");
|
||||
Conversation conversation = mXmppConnectionService
|
||||
.findOrCreateConversation(account, fromParts[0], false);
|
||||
updateLastseen(packet, account);
|
||||
updateLastseen(packet, account,true);
|
||||
String body = packet.getBody();
|
||||
if (!conversation.hasValidOtrSession()) {
|
||||
if (properlyAddressed) {
|
||||
|
@ -174,7 +174,7 @@ public class MessageParser extends AbstractParser {
|
|||
return null; // either malformed or boring
|
||||
if (status == Message.STATUS_RECIEVED) {
|
||||
fullJid = message.getAttribute("from");
|
||||
updateLastseen(message, account);
|
||||
updateLastseen(message, account,true);
|
||||
} else {
|
||||
fullJid = message.getAttribute("to");
|
||||
}
|
||||
|
@ -200,6 +200,28 @@ public class MessageParser extends AbstractParser {
|
|||
packet.getId(), Message.STATUS_SEND_FAILED);
|
||||
}
|
||||
|
||||
public void parseNormal(MessagePacket packet, Account account) {
|
||||
if (packet.hasChild("displayed","urn:xmpp:chat-markers:0")) {
|
||||
String id = packet.findChild("displayed","urn:xmpp:chat-markers:0").getAttribute("id");
|
||||
String[] fromParts = packet.getFrom().split("/");
|
||||
updateLastseen(packet, account,true);
|
||||
mXmppConnectionService.markMessage(account,fromParts[0], id, Message.STATUS_SEND_DISPLAYED);
|
||||
} else if (packet.hasChild("received","urn:xmpp:chat-markers:0")) {
|
||||
String id = packet.findChild("received","urn:xmpp:chat-markers:0").getAttribute("id");
|
||||
String[] fromParts = packet.getFrom().split("/");
|
||||
updateLastseen(packet, account,false);
|
||||
mXmppConnectionService.markMessage(account,fromParts[0], id, Message.STATUS_SEND_RECEIVED);
|
||||
} else if (packet.hasChild("x")) {
|
||||
Element x = packet.findChild("x");
|
||||
if (x.hasChild("invite")) {
|
||||
Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, packet.getFrom(),
|
||||
true);
|
||||
mXmppConnectionService.updateUi(conversation, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private String getPgpBody(Element message) {
|
||||
Element child = message.findChild("x", "jabber:x:encrypted");
|
||||
if (child == null) {
|
||||
|
@ -216,4 +238,6 @@ public class MessageParser extends AbstractParser {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -71,9 +71,9 @@ public class PresenceParser extends AbstractParser {
|
|||
x.getContent()));
|
||||
}
|
||||
}
|
||||
updateLastseen(packet, account,true);
|
||||
mXmppConnectionService.onContactStatusChanged
|
||||
.onContactStatusChanged(contact);
|
||||
updateLastseen(packet, account);
|
||||
}
|
||||
} else if (type.equals("unavailable")) {
|
||||
if (fromParts.length != 2) {
|
||||
|
|
|
@ -178,30 +178,7 @@ public class XmppConnectionService extends Service {
|
|||
mMessageParser.parseError(packet, account);
|
||||
return;
|
||||
} else if (packet.getType() == MessagePacket.TYPE_NORMAL) {
|
||||
if (packet.hasChild("displayed","urn:xmpp:chat-markers:0")) {
|
||||
String id = packet.findChild("displayed","urn:xmpp:chat-markers:0").getAttribute("id");
|
||||
String[] fromParts = packet.getFrom().split("/");
|
||||
markMessage(account,fromParts[0], id, Message.STATUS_SEND_DISPLAYED);
|
||||
Log.d(LOGTAG,"message was displayed by contact");
|
||||
} else if (packet.hasChild("received","urn:xmpp:chat-markers:0")) {
|
||||
String id = packet.findChild("received","urn:xmpp:chat-markers:0").getAttribute("id");
|
||||
String[] fromParts = packet.getFrom().split("/");
|
||||
markMessage(account,fromParts[0], id, Message.STATUS_SEND_RECEIVED);
|
||||
} else if (packet.hasChild("x")) {
|
||||
Element x = packet.findChild("x");
|
||||
if (x.hasChild("invite")) {
|
||||
findOrCreateConversation(account, packet.getFrom(),
|
||||
true);
|
||||
if (convChangedListener != null) {
|
||||
convChangedListener.onConversationListChanged();
|
||||
}
|
||||
Log.d(LOGTAG,
|
||||
"invitation received to " + packet.getFrom());
|
||||
}
|
||||
|
||||
} else {
|
||||
//Log.d(LOGTAG, "unparsed message " + packet.toString());
|
||||
}
|
||||
mMessageParser.parseNormal(packet, account);
|
||||
}
|
||||
if ((message == null) || (message.getBody() == null)) {
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue