Bugfix: MessageListByRequestIndexOrUids() sort order failed due to new SequenceSet

This commit is contained in:
djmaze 2022-01-06 12:28:12 +01:00
parent 55160a5152
commit 9b25b8580c
2 changed files with 15 additions and 9 deletions

View file

@ -31,9 +31,9 @@ class SequenceSet /*extends \SplFixedArray*/ implements \Countable
public function __construct($mItems, bool $uid = true) public function __construct($mItems, bool $uid = true)
{ {
if (\is_array($mItems)) { if (\is_array($mItems)) {
$this->data = $uid ? \array_filter(\array_map(function($id){ $this->data = \array_values($uid ? \array_filter(\array_map(function($id){
return \preg_match('/^([0-9]+|\\*):([0-9]+|\\*)/', $id, $dummy) ? $id : \intval($id); return \preg_match('/^([0-9]+|\\*):([0-9]+|\\*)/', $id, $dummy) ? $id : \intval($id);
}, $mItems)) : $mItems; }, $mItems)) : $mItems);
} else if (\is_scalar($mItems)) { } else if (\is_scalar($mItems)) {
$this->data[] = $mItems; $this->data[] = $mItems;
} }
@ -50,6 +50,11 @@ class SequenceSet /*extends \SplFixedArray*/ implements \Countable
return \in_array($value, $this->data); return \in_array($value, $this->data);
} }
public function indexOf($value)/*: int|false*/
{
return \array_search($value, $this->data);
}
public function __toString(): string public function __toString(): string
{ {
$aResult = array(); $aResult = array();

View file

@ -781,15 +781,16 @@ class MailClient
if (\count($aFetchResponse)) if (\count($aFetchResponse))
{ {
$aCollection = [];
$sFetchType = $oRange->UID ? \MailSo\Imap\Enumerations\FetchType::UID : \MailSo\Imap\Enumerations\FetchType::INDEX; $sFetchType = $oRange->UID ? \MailSo\Imap\Enumerations\FetchType::UID : \MailSo\Imap\Enumerations\FetchType::INDEX;
foreach ($aFetchResponse as /* @var $oFetchResponseItem \MailSo\Imap\FetchResponse */ $oFetchResponseItem) foreach ($aFetchResponse as /* @var $oFetchResponseItem \MailSo\Imap\FetchResponse */ $oFetchResponseItem) {
{ $i = $oRange->indexOf($oFetchResponseItem->GetFetchValue($sFetchType));
if ($oRange->contains($oFetchResponseItem->GetFetchValue($sFetchType))) { if (false !== $i) {
$oMessageCollection->append( $aCollection[$i] = Message::NewFetchResponseInstance($oMessageCollection->FolderName, $oFetchResponseItem);
Message::NewFetchResponseInstance($oMessageCollection->FolderName, $oFetchResponseItem)
);
} }
} }
\ksort($aCollection);
$oMessageCollection->exchangeArray(\array_values($aCollection));
} }
} }
} }
@ -927,7 +928,7 @@ class MailClient
* @throws \MailSo\Net\Exceptions\Exception * @throws \MailSo\Net\Exceptions\Exception
* @throws \MailSo\Imap\Exceptions\Exception * @throws \MailSo\Imap\Exceptions\Exception
*/ */
public function MessageList(\MailSo\Mail\MessageListParams $oParams) : MessageCollection public function MessageList(MessageListParams $oParams) : MessageCollection
{ {
if (!\MailSo\Base\Validator::RangeInt($oParams->iOffset, 0) || if (!\MailSo\Base\Validator::RangeInt($oParams->iOffset, 0) ||
!\MailSo\Base\Validator::RangeInt($oParams->iLimit, 0, 999)) !\MailSo\Base\Validator::RangeInt($oParams->iLimit, 0, 999))