parse all delayed tags. use min date
This commit is contained in:
parent
e973117aed
commit
6ccdd1227e
|
@ -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) {
|
||||||
|
|
|
@ -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))) {
|
||||||
|
|
Loading…
Reference in a new issue