listMailboxesByReferenceAndName method

Future<List<Mailbox>> listMailboxesByReferenceAndName(
  1. String referenceName,
  2. String mailboxName, [
  3. List<String>? mailboxPatterns,
  4. List<String>? selectionOptions,
  5. List<ReturnOption>? returnOptions,
])

Lists all mailboxes in the path referenceName that match the given mailboxName that can contain wildcards.

If the server exposes the LIST-STATUS capability, a list of attributes can be provided with returnOptions. The LIST command will set the serverInfo.pathSeparator as a side-effect

Implementation

Future<List<Mailbox>> listMailboxesByReferenceAndName(
    String referenceName, String mailboxName,
    [List<String>? mailboxPatterns,
    List<String>? selectionOptions,
    List<ReturnOption>? returnOptions]) {
  final buffer = StringBuffer('LIST');
  final bool hasSelectionOptions;
  if (selectionOptions != null && selectionOptions.isNotEmpty) {
    hasSelectionOptions = true;
    buffer
      ..write(' (')
      ..write(selectionOptions.join(' '))
      ..write(')');
  } else {
    hasSelectionOptions = false;
  }
  buffer
    ..write(' ')
    ..write(_encodeMailboxPath(referenceName, true));
  final bool hasMailboxPatterns;
  if (mailboxPatterns != null && mailboxPatterns.isNotEmpty) {
    hasMailboxPatterns = true;
    buffer
      ..write(' (')
      ..write(
          mailboxPatterns.map((e) => _encodeMailboxPath(e, true)).join(' '))
      ..write(')');
  } else {
    hasMailboxPatterns = false;
    buffer
      ..write(' ')
      ..write(_encodeMailboxPath(mailboxName, true));
  }
  final bool hasReturnOptions;
  if (returnOptions != null && returnOptions.isNotEmpty) {
    hasReturnOptions = true;
    buffer
      ..write(' RETURN (')
      ..write(returnOptions.join(' '))
      ..write(')');
  } else {
    hasReturnOptions = false;
  }
  final cmd = Command(
    buffer.toString(),
    writeTimeout: defaultWriteTimeout,
    responseTimeout: defaultResponseTimeout,
  );
  final parser = ListParser(serverInfo,
      isExtended:
          hasSelectionOptions || hasMailboxPatterns || hasReturnOptions,
      hasReturnOptions: hasReturnOptions);
  return sendCommand<List<Mailbox>>(cmd, parser);
}