AbstractParser.java

 1package eu.siacs.conversations.parser;
 2
 3
 4import java.text.ParseException;
 5import java.text.SimpleDateFormat;
 6import java.util.Date;
 7import java.util.Locale;
 8
 9import eu.siacs.conversations.entities.Account;
10import eu.siacs.conversations.entities.Contact;
11import eu.siacs.conversations.entities.Conversation;
12import eu.siacs.conversations.entities.MucOptions;
13import eu.siacs.conversations.services.XmppConnectionService;
14import eu.siacs.conversations.xml.Element;
15import eu.siacs.conversations.xmpp.jid.InvalidJidException;
16import eu.siacs.conversations.xmpp.jid.Jid;
17import eu.siacs.conversations.xmpp.stanzas.AbstractStanza;
18
19public abstract class AbstractParser {
20
21	protected XmppConnectionService mXmppConnectionService;
22
23	protected AbstractParser(XmppConnectionService service) {
24		this.mXmppConnectionService = service;
25	}
26
27	public static Long getTimestamp(Element element, Long defaultValue) {
28		Element delay = element.findChild("delay","urn:xmpp:delay");
29		if (delay != null) {
30			String stamp = delay.getAttribute("stamp");
31			if (stamp != null) {
32				try {
33					return AbstractParser.parseTimestamp(delay.getAttribute("stamp")).getTime();
34				} catch (ParseException e) {
35					return defaultValue;
36				}
37			}
38		}
39		return defaultValue;
40	}
41
42	protected long getTimestamp(Element packet) {
43		return getTimestamp(packet,System.currentTimeMillis());
44	}
45
46	public static Date parseTimestamp(String timestamp) throws ParseException {
47		timestamp = timestamp.replace("Z", "+0000");
48		SimpleDateFormat dateFormat;
49		timestamp = timestamp.substring(0,19)+timestamp.substring(timestamp.length() -5,timestamp.length());
50		dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ",Locale.US);
51		return dateFormat.parse(timestamp);
52	}
53
54	protected void updateLastseen(long timestamp, final Account account, final Jid from) {
55		final String presence = from == null || from.isBareJid() ? "" : from.getResourcepart();
56		final Contact contact = account.getRoster().getContact(from);
57		if (timestamp >= contact.lastseen.time) {
58			contact.lastseen.time = timestamp;
59			if (!presence.isEmpty()) {
60				contact.lastseen.presence = presence;
61			}
62		}
63	}
64
65	protected String avatarData(Element items) {
66		Element item = items.findChild("item");
67		if (item == null) {
68			return null;
69		}
70		return item.findChildContent("data", "urn:xmpp:avatar:data");
71	}
72
73	public static MucOptions.User parseItem(Conversation conference, Element item) {
74		final String local = conference.getJid().getLocalpart();
75		final String domain = conference.getJid().getDomainpart();
76		String affiliation = item.getAttribute("affiliation");
77		String role = item.getAttribute("role");
78		String nick = item.getAttribute("nick");
79		Jid fullJid;
80		try {
81			fullJid = nick != null ? Jid.fromParts(local, domain, nick) : null;
82		} catch (InvalidJidException e) {
83			fullJid = null;
84		}
85		Jid realJid = item.getAttributeAsJid("jid");
86		MucOptions.User user = new MucOptions.User(conference.getMucOptions(), fullJid);
87		user.setRealJid(realJid);
88		user.setAffiliation(affiliation);
89		user.setRole(role);
90		return user;
91	}
92}