queryByTime method

void queryByTime({
  1. DateTime? start,
  2. DateTime? end,
  3. Jid? jid,
})

Implementation

void queryByTime({DateTime? start, DateTime? end, Jid? jid}) {
  if (start == null && end == null && jid == null) {
    queryAll();
  } else {
    var iqStanza = IqStanza(AbstractStanza.getRandomId(), IqStanzaType.SET);
    var query = QueryElement();
    query.setXmlns('urn:xmpp:mam:2');
    query.setQueryId(AbstractStanza.getRandomId());
    iqStanza.addChild(query);
    var x = XElement.build();
    x.setType(FormType.SUBMIT);
    query.addChild(x);
    x.addField(FieldElement.build(
        varAttr: 'FORM_TYPE', typeAttr: 'hidden', value: 'urn:xmpp:mam:2'));
    if (start != null) {
      final iso8601 = start.toUtc().toIso8601String();
      final startStr = iso8601.substring(0, iso8601.length - 4) + 'Z';
      x.addField(FieldElement.build(varAttr: 'start', value: startStr));
    }
    if (end != null) {
      final iso8601 = end.toUtc().toIso8601String();
      final endStr = iso8601.substring(0, iso8601.length - 4) + 'Z';
      x.addField(FieldElement.build(varAttr: 'end', value: endStr));
    }
    if (jid != null) {
      x.addField(FieldElement.build(varAttr: 'with', value: jid.userAtDomain));
    }
    _connection.writeStanza(iqStanza);
  }
}