diff options
Diffstat (limited to 'src')
4 files changed, 31 insertions, 30 deletions
diff --git a/src/eu/siacs/conversations/parser/AbstractParser.java b/src/eu/siacs/conversations/parser/AbstractParser.java index 8c6ad2ab..2bd839f1 100644 --- a/src/eu/siacs/conversations/parser/AbstractParser.java +++ b/src/eu/siacs/conversations/parser/AbstractParser.java @@ -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; } } diff --git a/src/eu/siacs/conversations/parser/MessageParser.java b/src/eu/siacs/conversations/parser/MessageParser.java index 12e2aa16..046b4833 100644 --- a/src/eu/siacs/conversations/parser/MessageParser.java +++ b/src/eu/siacs/conversations/parser/MessageParser.java @@ -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"); } @@ -199,6 +199,28 @@ public class MessageParser extends AbstractParser { mXmppConnectionService.markMessage(account, fromParts[0], 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"); @@ -216,4 +238,6 @@ public class MessageParser extends AbstractParser { return null; } } + + } diff --git a/src/eu/siacs/conversations/parser/PresenceParser.java b/src/eu/siacs/conversations/parser/PresenceParser.java index 25a23423..d946f333 100644 --- a/src/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/eu/siacs/conversations/parser/PresenceParser.java @@ -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) { diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 6b9ffcf7..55e727f9 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -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; |