put xep333 parsing into parser class

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/parser/AbstractParser.java          |  4 
src/eu/siacs/conversations/parser/MessageParser.java           | 30 +++
src/eu/siacs/conversations/parser/PresenceParser.java          |  2 
src/eu/siacs/conversations/services/XmppConnectionService.java | 25 ---
4 files changed, 31 insertions(+), 30 deletions(-)

Detailed changes

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;
 			}
 		}

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;
 		}
 	}
+
+	
 }

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) {

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;