AbstractParser.java

 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}