aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/eu/siacs/conversations/parser/AbstractParser.java4
-rw-r--r--src/eu/siacs/conversations/parser/MessageParser.java30
-rw-r--r--src/eu/siacs/conversations/parser/PresenceParser.java2
-rw-r--r--src/eu/siacs/conversations/services/XmppConnectionService.java25
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;