diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2014-06-06 18:26:40 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel@gultsch.de> | 2014-06-06 18:26:40 +0200 |
commit | 476ab656ef0a50b081d92750b8b4251652ef4624 (patch) | |
tree | f59188e0258832beaa0057ef6f337b1c4e47dfa9 /src/eu/siacs/conversations/parser/AbstractParser.java | |
parent | 5cd750cb5e7ce5e9b0ddcab8e0089b964d1de70d (diff) |
refactored presence parsing into dedicated class
Diffstat (limited to 'src/eu/siacs/conversations/parser/AbstractParser.java')
-rw-r--r-- | src/eu/siacs/conversations/parser/AbstractParser.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/eu/siacs/conversations/parser/AbstractParser.java b/src/eu/siacs/conversations/parser/AbstractParser.java new file mode 100644 index 00000000..8c6ad2ab --- /dev/null +++ b/src/eu/siacs/conversations/parser/AbstractParser.java @@ -0,0 +1,53 @@ +package eu.siacs.conversations.parser; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Contact; +import eu.siacs.conversations.services.XmppConnectionService; +import eu.siacs.conversations.xml.Element; + +public abstract class AbstractParser { + + protected XmppConnectionService mXmppConnectionService; + + protected AbstractParser(XmppConnectionService service) { + this.mXmppConnectionService = service; + } + + protected long getTimestamp(Element packet) { + if (packet.hasChild("delay")) { + try { + String stamp = packet.findChild("delay").getAttribute( + "stamp"); + stamp = stamp.replace("Z", "+0000"); + Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") + .parse(stamp); + return date.getTime(); + } catch (ParseException e) { + return System.currentTimeMillis(); + } + } else { + return System.currentTimeMillis(); + } + } + + protected void updateLastseen(Element packet, Account account) { + String[] fromParts = packet.getAttribute("from").split("/"); + String from = fromParts[0]; + String presence = null; + if (fromParts.length >= 2) { + presence = fromParts[1]; + } + Contact contact = account.getRoster().getContact(from); + long timestamp = getTimestamp(packet); + if (timestamp >= contact.lastseen.time) { + contact.lastseen.time = timestamp; + if (presence!=null) { + contact.lastseen.presence = presence; + } + } + } +} |