collectContentInfo method

void collectContentInfo(
  1. ContentDisposition disposition,
  2. List<ContentInfo> result, {
  3. bool? reverse,
  4. bool? withCleanParts,
  5. bool? complete,
})

Adds the matching disposition header with the specified disposition of this part and this children parts to the result. Optionally set reverse to true to add all parts that do not match the specified disposition. All fetchId parsed from the BODYSTRUCTURE are returned in a form compatible with the body parts tree unless withCleanParts is false. Set complete to false to skip the included rfc822 messages parts.

Implementation

void collectContentInfo(
    ContentDisposition disposition, List<ContentInfo> result,
    {bool? reverse, bool? withCleanParts, bool? complete}) {
  reverse ??= false;
  withCleanParts ??= true;
  complete ??= true;
  final isMessage = contentType?.mediaType.isMessage ?? false;
  if (fetchId != null) {
    if ((!reverse && contentDisposition?.disposition == disposition) ||
        (reverse &&
            contentDisposition?.disposition != disposition &&
            contentType?.mediaType.top != MediaToptype.multipart)) {
      if (!withCleanParts ||
          (withCleanParts && !fetchId!.endsWith('.TEXT'))) {
        final info = ContentInfo(
            withCleanParts ? fetchId!.replaceAll('.TEXT', '') : fetchId!)
          ..contentDisposition = contentDisposition
          ..contentType = contentType
          ..cid = cid;
        result.add(info);
      }
    }
  }
  if (!complete &&
      isMessage &&
      ((reverse && disposition == ContentDisposition.attachment) ||
          (!reverse && disposition == ContentDisposition.inline))) {
    // abort to search for inline parts at messages, unless attachments are searched
    return;
  }
  if (parts?.isNotEmpty ?? false) {
    for (final part in parts!) {
      if ((disposition == ContentDisposition.attachment &&
              reverse &&
              part.contentDisposition?.disposition ==
                  ContentDisposition.attachment) ||
          (disposition == ContentDisposition.inline &&
              !reverse &&
              part.contentDisposition?.disposition ==
                  ContentDisposition.attachment)) {
        // abort at attachents when inline parts are searched for
        continue;
      }
      part.collectContentInfo(disposition, result,
          reverse: reverse,
          withCleanParts: withCleanParts,
          complete: complete);
    }
  }
}