1package eu.siacs.conversations.parser;
2
3import java.text.ParseException;
4import java.text.SimpleDateFormat;
5import java.util.Date;
6
7import eu.siacs.conversations.entities.Account;
8import eu.siacs.conversations.entities.Contact;
9import eu.siacs.conversations.services.XmppConnectionService;
10import eu.siacs.conversations.xml.Element;
11
12public abstract class AbstractParser {
13
14 protected XmppConnectionService mXmppConnectionService;
15
16 protected AbstractParser(XmppConnectionService service) {
17 this.mXmppConnectionService = service;
18 }
19
20 protected long getTimestamp(Element packet) {
21 if (packet.hasChild("delay")) {
22 try {
23 String stamp = packet.findChild("delay").getAttribute(
24 "stamp");
25 stamp = stamp.replace("Z", "+0000");
26 Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
27 .parse(stamp);
28 return date.getTime();
29 } catch (ParseException e) {
30 return System.currentTimeMillis();
31 }
32 } else {
33 return System.currentTimeMillis();
34 }
35 }
36
37 protected void updateLastseen(Element packet, Account account, boolean presenceOverwrite) {
38 String[] fromParts = packet.getAttribute("from").split("/");
39 String from = fromParts[0];
40 String presence = null;
41 if (fromParts.length >= 2) {
42 presence = fromParts[1];
43 }
44 Contact contact = account.getRoster().getContact(from);
45 long timestamp = getTimestamp(packet);
46 if (timestamp >= contact.lastseen.time) {
47 contact.lastseen.time = timestamp;
48 if ((presence!=null)&&(presenceOverwrite)) {
49 contact.lastseen.presence = presence;
50 }
51 }
52 }
53}