parse all delayed tags. use min date
This commit is contained in:
parent
e973117aed
commit
6ccdd1227e
|
@ -22,19 +22,27 @@ public abstract class AbstractParser {
|
|||
}
|
||||
|
||||
public static Long parseTimestamp(Element element, Long d) {
|
||||
Element delay = element.findChild("delay","urn:xmpp:delay");
|
||||
if (delay != null) {
|
||||
String stamp = delay.getAttribute("stamp");
|
||||
long min = Long.MAX_VALUE;
|
||||
boolean returnDefault = true;
|
||||
for(Element child : element.getChildren()) {
|
||||
if ("delay".equals(child.getName()) && "urn:xmpp:delay".equals(child.getNamespace())) {
|
||||
String stamp = child.getAttribute("stamp");
|
||||
if (stamp != null) {
|
||||
try {
|
||||
return AbstractParser.parseTimestamp(delay.getAttribute("stamp"));
|
||||
min = Math.min(min,AbstractParser.parseTimestamp(stamp));
|
||||
returnDefault = false;
|
||||
} catch (ParseException e) {
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (returnDefault) {
|
||||
return d;
|
||||
} else {
|
||||
return min;
|
||||
}
|
||||
}
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
public static long parseTimestamp(Element element) {
|
||||
return parseTimestamp(element, System.currentTimeMillis());
|
||||
|
|
|
@ -215,12 +215,14 @@ public class PresenceParser extends AbstractParser implements
|
|||
|
||||
final Element idle = packet.findChild("idle", Namespace.IDLE);
|
||||
if (idle != null) {
|
||||
contact.flagInactive();
|
||||
final String since = idle.getAttribute("since");
|
||||
try {
|
||||
final String since = idle.getAttribute("since");
|
||||
contact.setLastseen(AbstractParser.parseTimestamp(since));
|
||||
contact.flagInactive();
|
||||
} catch (NullPointerException | ParseException e) {
|
||||
contact.setLastseen(System.currentTimeMillis());
|
||||
if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {
|
||||
contact.flagActive();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (contact.setLastseen(AbstractParser.parseTimestamp(packet))) {
|
||||
|
|
Loading…
Reference in New Issue