parse all delayed tags. use min date

This commit is contained in:
Daniel Gultsch 2017-05-30 08:39:04 +02:00
parent e973117aed
commit 6ccdd1227e
2 changed files with 22 additions and 12 deletions

View file

@ -22,18 +22,26 @@ public abstract class AbstractParser {
} }
public static Long parseTimestamp(Element element, Long d) { public static Long parseTimestamp(Element element, Long d) {
Element delay = element.findChild("delay","urn:xmpp:delay"); long min = Long.MAX_VALUE;
if (delay != null) { boolean returnDefault = true;
String stamp = delay.getAttribute("stamp"); for(Element child : element.getChildren()) {
if (stamp != null) { if ("delay".equals(child.getName()) && "urn:xmpp:delay".equals(child.getNamespace())) {
try { String stamp = child.getAttribute("stamp");
return AbstractParser.parseTimestamp(delay.getAttribute("stamp")); if (stamp != null) {
} catch (ParseException e) { try {
return d; min = Math.min(min,AbstractParser.parseTimestamp(stamp));
returnDefault = false;
} catch (ParseException e) {
//ignore
}
} }
} }
} }
return d; if (returnDefault) {
return d;
} else {
return min;
}
} }
public static long parseTimestamp(Element element) { public static long parseTimestamp(Element element) {

View file

@ -215,12 +215,14 @@ public class PresenceParser extends AbstractParser implements
final Element idle = packet.findChild("idle", Namespace.IDLE); final Element idle = packet.findChild("idle", Namespace.IDLE);
if (idle != null) { if (idle != null) {
contact.flagInactive();
final String since = idle.getAttribute("since");
try { try {
final String since = idle.getAttribute("since");
contact.setLastseen(AbstractParser.parseTimestamp(since)); contact.setLastseen(AbstractParser.parseTimestamp(since));
contact.flagInactive();
} catch (NullPointerException | ParseException e) { } catch (NullPointerException | ParseException e) {
contact.setLastseen(System.currentTimeMillis()); if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {
contact.flagActive();
}
} }
} else { } else {
if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) { if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {