getMessage method
Future<MimeMessage>
getMessage(
- int messageIndex,
- MailClient mailClient, {
- Mailbox? mailbox,
- FetchPreference fetchPreference = FetchPreference.envelope,
Retrieves the message at the given index.
Note that the messageIndex
is expected to be based on
full messageSequence
, where index 0 is newest message and
size-1
is the oldest message.
Implementation
Future<MimeMessage> getMessage(int messageIndex, MailClient mailClient,
{Mailbox? mailbox,
FetchPreference fetchPreference = FetchPreference.envelope}) async {
Future<List<MimeMessage>> queue(int pageIndex) {
final sequence = pagedSequence.getSequence(pageIndex);
final future = mailClient.fetchMessageSequence(sequence,
mailbox: mailbox, fetchPreference: fetchPreference);
_requestedPages[pageIndex] = future;
return future;
}
if (isAvailable(messageIndex)) {
return this[messageIndex];
}
final pageIndex = pagedSequence.pageIndexOf(messageIndex);
if (pageIndex > 0) {
// ensure that previous pages are loaded first:
final previousRequest = _requestedPages[pageIndex - 1];
if (previousRequest != null) {
await previousRequest;
}
}
final request = _requestedPages[pageIndex] ?? queue(pageIndex);
final messages = await request;
if (_requestedPages.containsKey(pageIndex)) {
unawaited(_requestedPages.remove(pageIndex));
insertAll(messages);
}
final relativeIndex =
(pageIndex * pagedSequence.pageSize + messages.length) -
(messageIndex + 1);
return messages[relativeIndex];
}