From 1ef7ea3f27836e884f80672d30bbc08367b70125 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Tue, 31 May 2022 10:08:31 +0200 Subject: [PATCH] Made IMAP THREAD command iterable --- .../libraries/MailSo/Imap/Commands/Messages.php | 4 ++-- .../MailSo/Imap/Enumerations/StoreAction.php | 4 ++-- .../libraries/MailSo/Imap/Requests/THREAD.php | 6 ++---- .../app/libraries/MailSo/Mail/MailClient.php | 17 +++++++---------- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php index 77bb81db9..78109fe8d 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Commands/Messages.php @@ -402,12 +402,12 @@ trait Messages * @throws \MailSo\Net\Exceptions\Exception * @throws \MailSo\Imap\Exceptions\Exception */ - public function MessageSimpleThread(string $sSearchCriterias = 'ALL', bool $bReturnUid = true) : array + public function MessageSimpleThread(string $sSearchCriterias = 'ALL', bool $bReturnUid = true) : iterable { $oThread = new \MailSo\Imap\Requests\THREAD($this); $oThread->sCriterias = $sSearchCriterias; $oThread->bUid = $bReturnUid; - return $oThread->SendRequestGetResponse(); + yield from $oThread->SendRequestIterateResponse(); } private function getSimpleESearchOrESortResult(bool $bReturnUid) : array diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php index 4c6d8b44e..172e0e89b 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Enumerations/StoreAction.php @@ -18,8 +18,8 @@ namespace MailSo\Imap\Enumerations; */ abstract class StoreAction { - const SET_FLAGS = 'FLAGS'; - const SET_FLAGS_SILENT = 'FLAGS.SILENT'; +// const SET_FLAGS = 'FLAGS'; +// const SET_FLAGS_SILENT = 'FLAGS.SILENT'; const ADD_FLAGS = '+FLAGS'; const ADD_FLAGS_SILENT = '+FLAGS.SILENT'; const REMOVE_FLAGS = '-FLAGS'; diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Requests/THREAD.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Requests/THREAD.php index 017724e5e..818258c1c 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Requests/THREAD.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/Requests/THREAD.php @@ -41,7 +41,7 @@ class THREAD extends Request parent::__construct($oImapClient); } - public function SendRequestGetResponse() : array + public function SendRequestIterateResponse() : iterable { if (!$this->oImapClient->IsSupported(\strtoupper("THREAD={$this->sAlgorithm}"))) { $this->oImapClient->writeLogException( @@ -58,7 +58,6 @@ class THREAD extends Request ) ); - $aReturn = array(); foreach ($this->oImapClient->yieldUntaggedResponses() as $oResponse) { $iOffset = ($this->bUid && 'UID' === $oResponse->StatusOrIndex && !empty($oResponse->ResponseList[2]) && 'THREAD' === $oResponse->ResponseList[2]) ? 1 : 0; if (('THREAD' === $oResponse->StatusOrIndex || $iOffset) @@ -69,12 +68,11 @@ class THREAD extends Request for ($iIndex = 2 + $iOffset; $iIndex < $iLen; ++$iIndex) { $aNewValue = $this->validateThreadItem($oResponse->ResponseList[$iIndex]); if (\is_array($aNewValue)) { - $aReturn[] = $aNewValue; + yield $aNewValue; } } } } - return $aReturn; } /** diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php index 1e5e322ce..ea778475c 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/MailClient.php @@ -618,10 +618,15 @@ class MailClient $this->oImapClient->FolderExamine($sFolderName); - $aThreadUids = array(); + $aResult = array(); try { - $aThreadUids = $this->oImapClient->MessageSimpleThread($sSearchHash); + foreach ($this->oImapClient->MessageSimpleThread($sSearchHash) as $mItem) { + // Flatten to single level + $aMap = []; + \array_walk_recursive($mItem, function($a) use (&$aMap) { $aMap[] = $a; }); + $aResult[] = $aMap; + } } catch (\MailSo\Imap\Exceptions\RuntimeException $oException) { @@ -629,14 +634,6 @@ class MailClient unset($oException); } - // Flatten to single levels - $aResult = array(); - foreach ($aThreadUids as $mItem) { - $aMap = []; - \array_walk_recursive($mItem, function($a) use (&$aMap) { $aMap[] = $a; }); - $aResult[] = $aMap; - } - if ($oCacher && $oCacher->IsInited() && !empty($sSerializedHashKey)) { $oCacher->Set($sSerializedHashKey, \json_encode(array(