collectContentInfo method
void
collectContentInfo(
- ContentDisposition disposition,
- List<
ContentInfo> result, { - bool? reverse,
- bool? withCleanParts,
- 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;
final fetchId = this.fetchId;
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;
}
final parts = this.parts;
if (parts != null && parts.isNotEmpty) {
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 attachments when inline parts are searched for
continue;
}
part.collectContentInfo(
disposition,
result,
reverse: reverse,
withCleanParts: withCleanParts,
complete: complete,
);
}
}
}