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;
}