From f992a06b6327ff8f5d4cae61e17c04cd0cef5a05 Mon Sep 17 00:00:00 2001 From: djmaze Date: Tue, 26 Oct 2021 15:30:51 +0200 Subject: [PATCH] Support RFC5258 to prevent LSUB roundtrip --- .../v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php | 5 +++++ .../v/0.0.0/app/libraries/MailSo/Mail/Folder.php | 2 +- .../v/0.0.0/app/libraries/MailSo/Mail/MailClient.php | 12 +++++++----- .../0.0.0/app/libraries/RainLoop/Actions/Folders.php | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php index 27bc76d2e..50cef14d8 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Imap/ImapClient.php @@ -473,6 +473,11 @@ class ImapClient extends \MailSo\Net\NetClient else { $bUseListStatus = false; + // RFC5258 + if ($this->IsSupported('LIST-EXTENDED')) { + $aParameters[] = 'RETURN'; + $aParameters[] = array('SUBSCRIBED'/*,'CHILDREN'*/); + } } $aReturn = $this->SendRequestGetResponse($sCmd, $aParameters)->getFoldersResult($sCmd, $bUseListStatus); diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/Folder.php b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/Folder.php index f556eed95..a444ce9b8 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Mail/Folder.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Mail/Folder.php @@ -68,7 +68,7 @@ class Folder implements \JsonSerializable $this->sParentFullNameRaw = \implode($this->oImapFolder->Delimiter(), $aNames); } - $this->bSubscribed = $bSubscribed; + $this->bSubscribed = $bSubscribed || \in_array('\\subscribed', $oImapFolder->FlagsLowerCase()); $this->bExists = $bExists; } 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 2c56115dc..5583e89cf 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 @@ -1915,8 +1915,10 @@ class MailClient public function Folders(string $sParent = '', string $sListPattern = '*', bool $bUseListSubscribeStatus = true, int $iOptimizationLimit = 0) : ?FolderCollection { $aImapSubscribedFoldersHelper = null; - if ($bUseListSubscribeStatus) - { + if ($this->oImapClient->IsSupported('LIST-EXTENDED')) { + $bUseListSubscribeStatus = false; + } else if ($bUseListSubscribeStatus) { + //\error_log('RFC5258 not supported, using LSUB'); try { $aSubscribedFolders = $this->oImapClient->FolderSubscribeList($sParent, $sListPattern); @@ -1928,7 +1930,7 @@ class MailClient } catch (\Throwable $oException) { - unset($oException); + \error_log('ERROR FolderSubscribeList: ' . $oException->getMessage()); } } @@ -1941,8 +1943,8 @@ class MailClient foreach ($aFolders as /* @var $oImapFolder \MailSo\Imap\Folder */ $oImapFolder) { $aMailFoldersHelper[] = new Folder($oImapFolder, - (null === $aImapSubscribedFoldersHelper || \in_array($oImapFolder->FullNameRaw(), $aImapSubscribedFoldersHelper)) || - $oImapFolder->IsInbox() + ($bUseListSubscribeStatus && (null === $aImapSubscribedFoldersHelper || \in_array($oImapFolder->FullNameRaw(), $aImapSubscribedFoldersHelper))) + || $oImapFolder->IsInbox() ); } diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Folders.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Folders.php index 8f2c15422..456880c0f 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Folders.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Folders.php @@ -193,7 +193,7 @@ trait Folders try { - $this->MailClient()->FolderSubscribe($sFolderFullNameRaw, !!$bSubscribe); + $this->MailClient()->FolderSubscribe($sFolderFullNameRaw, $bSubscribe); } catch (\Throwable $oException) {