getParent method
Tries to determine the parent mailbox
from the given knownMailboxes and separator.
Set create to false in case the parent should only be determined
from the known mailboxes (defaults to true).
Set createIntermediate to false and create to true to return
the first known existing parent, when the direct parent is not known
Implementation
Mailbox? getParent(
List<Mailbox> knownMailboxes,
String separator, {
bool create = true,
bool createIntermediate = true,
}) {
var lastSplitIndex = encodedPath.lastIndexOf(separator);
if (lastSplitIndex == -1) {
// this is a root mailbox, eg 'Inbox'
return null;
}
final parentPath = encodedPath.substring(0, lastSplitIndex);
var parent =
knownMailboxes.firstWhereOrNull((box) => box.path == parentPath);
if (parent == null && create) {
lastSplitIndex = parentPath.lastIndexOf(separator);
final parentName = (lastSplitIndex == -1)
? parentPath
: parentPath.substring(lastSplitIndex + 1);
parent = Mailbox(
encodedName: parentName,
encodedPath: parentPath,
flags: [MailboxFlag.noSelect],
pathSeparator: separator,
);
if ((lastSplitIndex != -1) && (!createIntermediate)) {
parent = parent.getParent(
knownMailboxes,
separator,
create: true,
createIntermediate: false,
);
}
}
return parent;
}