Better fix for broken DoFolderInformation() response

This commit is contained in:
djmaze 2021-11-01 12:10:45 +01:00
parent e52addf346
commit 013f09c8d3
2 changed files with 16 additions and 21 deletions

View file

@ -653,8 +653,19 @@ class MailClient
foreach ($aFetchResponse as $oFetchResponse)
{
$iUid = (int) $oFetchResponse->GetFetchValue(\MailSo\Imap\Enumerations\FetchType::UID);
$aFlags[$iUid] =
$oFetchResponse->GetFetchValue(\MailSo\Imap\Enumerations\FetchType::FLAGS);
$aLowerFlags = \array_map('strtolower', $oFetchResponse->GetFetchValue(\MailSo\Imap\Enumerations\FetchType::FLAGS));
$aFlags[] = array(
'Uid' => $iUid,
'IsUnseen' => \in_array('\\unseen', $aLowerFlags) || !\in_array('\\seen', $aLowerFlags),
'IsSeen' => \in_array('\\seen', $aLowerFlags),
'IsFlagged' => \in_array('\\flagged', $aLowerFlags),
'IsAnswered' => \in_array('\\answered', $aLowerFlags),
'IsDeleted' => \in_array('\\deleted', $aLowerFlags),
'IsForwarded' => \in_array(\strtolower('$Forwarded'), $aLowerFlags) || ($sForwardedFlag && \in_array(\strtolower($sForwardedFlag), $aLowerFlags)),
'IsReadReceipt' => \in_array(\strtolower('$MDNSent'), $aLowerFlags) || ($sReadReceiptFlag && \in_array(\strtolower($sReadReceiptFlag), $aLowerFlags)),
'IsJunk' => !\in_array(\strtolower('$NonJunk'), $aLowerFlags) && \in_array(\strtolower('$Junk'), $aLowerFlags),
'IsPhishing' => \in_array(\strtolower('$Phishing'), $aLowerFlags)
);
}
}
@ -666,7 +677,7 @@ class MailClient
'MessageCount' => $iCount,
'MessageUnseenCount' => $iUnseenCount,
'UidNext' => $iUidNext,
'MessageFlags' => $aFlags,
'MessagesFlags' => $aFlags,
'HighestModSeq' => $iHighestModSeq,
'AppendLimit' => $iAppendLimit,
'MailboxId' => $sMailboxId,

View file

@ -363,24 +363,8 @@ trait Folders
$aInboxInformation = $this->MailClient()->FolderInformation(
$sFolder, $iPrevUidNext, $aFlagsUids
);
foreach ($aInboxInformation['MessageFlags'] as $iUid => $aFlags)
{
$aLowerFlags = \array_map('strtolower', $aFlags);
$aInboxInformation['Flags'][$iUid] = array(
'Uid' => $iUid,
'IsUnseen' => \in_array('\\unseen', $aLowerFlags) || !\in_array('\\seen', $aLowerFlags),
'IsSeen' => \in_array('\\seen', $aLowerFlags),
'IsFlagged' => \in_array('\\flagged', $aLowerFlags),
'IsAnswered' => \in_array('\\answered', $aLowerFlags),
'IsDeleted' => \in_array('\\deleted', $aLowerFlags),
'IsForwarded' => \in_array(\strtolower('$Forwarded'), $aLowerFlags) || ($sForwardedFlag && \in_array(\strtolower($sForwardedFlag), $aLowerFlags)),
'IsReadReceipt' => \in_array(\strtolower('$MDNSent'), $aLowerFlags) || ($sReadReceiptFlag && \in_array(\strtolower($sReadReceiptFlag), $aLowerFlags)),
'IsJunk' => !\in_array(\strtolower('$NonJunk'), $aLowerFlags) && \in_array(\strtolower('$Junk'), $aLowerFlags),
'IsPhishing' => \in_array(\strtolower('$Phishing'), $aLowerFlags)
);
}
$aInboxInformation['Flags'] = \array_values($aInboxInformation['Flags']);
unset($aInboxInformation['MessageFlags']);
$aInboxInformation['Flags'] = $aInboxInformation['MessagesFlags'];
unset($aInboxInformation['MessagesFlags']);
}
catch (\Throwable $oException)
{