HighestModSeq & Uidvalidity are integers according to IMAP RFC

This commit is contained in:
djmaze 2021-09-01 16:08:44 +02:00
parent 010794fccb
commit 448120b665
3 changed files with 39 additions and 53 deletions

View file

@ -30,55 +30,51 @@ class FolderInformation
/** /**
* @var array * @var array
*/ */
public $Flags; public $Flags = array();
/** /**
* @var array * @var array
*/ */
public $PermanentFlags; public $PermanentFlags = array();
/** /**
* @var int * @var int
*/ */
public $Exists; public $Exists = null;
/** /**
* @var int * @var int
*/ */
public $Recent; public $Recent = null;
/** /**
* @var string * rfc3501 2.3.1.1
* A 32-bit value
* @var int
*/ */
public $Uidvalidity; public $Uidvalidity = null;
/** /**
* @var int * @var int
*/ */
public $Unread; public $Unread = null;
/** /**
* @var string * @var string
*/ */
public $Uidnext; public $Uidnext = null;
/** /**
* @var string * rfc4551
* 1*DIGIT Positive unsigned 64-bit integer
* @var int
*/ */
public $HighestModSeq; public $HighestModSeq = null;
function __construct(string $sFolderName, bool $bIsWritable) function __construct(string $sFolderName, bool $bIsWritable)
{ {
$this->FolderName = $sFolderName; $this->FolderName = $sFolderName;
$this->IsWritable = $bIsWritable; $this->IsWritable = $bIsWritable;
$this->Exists = null;
$this->Recent = null;
$this->Flags = array();
$this->PermanentFlags = array();
$this->Unread = null;
$this->Uidnext = null;
$this->HighestModSeq = null;
} }
public function IsFlagSupported(string $sFlag) : bool public function IsFlagSupported(string $sFlag) : bool

View file

@ -300,32 +300,26 @@ class ResponseCollection extends \MailSo\Base\Collection
} }
if (is_array($oResponse->OptionalResponse) && \count($oResponse->OptionalResponse) > 1) { if (is_array($oResponse->OptionalResponse) && \count($oResponse->OptionalResponse) > 1) {
if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0] && if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0]
is_array($oResponse->OptionalResponse[1])) && is_array($oResponse->OptionalResponse[1]))
{ {
$oResult->PermanentFlags = $oResponse->OptionalResponse[1]; $oResult->PermanentFlags = $oResponse->OptionalResponse[1];
} }
else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0] && else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0])
isset($oResponse->OptionalResponse[1]))
{ {
$oResult->Uidvalidity = $oResponse->OptionalResponse[1]; $oResult->Uidvalidity = (int) $oResponse->OptionalResponse[1];
} }
else if ('UNSEEN' === $oResponse->OptionalResponse[0] && else if ('UNSEEN' === $oResponse->OptionalResponse[0])
isset($oResponse->OptionalResponse[1]) &&
is_numeric($oResponse->OptionalResponse[1]))
{ {
$oResult->Unread = (int) $oResponse->OptionalResponse[1]; $oResult->Unread = (int) $oResponse->OptionalResponse[1];
} }
else if ('UIDNEXT' === $oResponse->OptionalResponse[0] && else if ('UIDNEXT' === $oResponse->OptionalResponse[0])
isset($oResponse->OptionalResponse[1]))
{ {
$oResult->Uidnext = $oResponse->OptionalResponse[1]; $oResult->Uidnext = $oResponse->OptionalResponse[1];
} }
else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0] && else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0])
isset($oResponse->OptionalResponse[1]) &&
\is_numeric($oResponse->OptionalResponse[1]))
{ {
$oResult->HighestModSeq = \trim($oResponse->OptionalResponse[1]); $oResult->HighestModSeq = (int) $oResponse->OptionalResponse[1];
} }
} }

View file

@ -556,7 +556,7 @@ class MailClient
} }
protected function initFolderValues(string $sFolderName, int &$iCount, int &$iUnseenCount, protected function initFolderValues(string $sFolderName, int &$iCount, int &$iUnseenCount,
string &$sUidNext, string &$sHighestModSeq = '') : void string &$sUidNext, int &$iHighestModSeq = 0) : void
{ {
$aTypes = array( $aTypes = array(
\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES, \MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES,
@ -571,17 +571,13 @@ class MailClient
$aFolderStatus = $this->oImapClient->FolderStatus($sFolderName, $aTypes); $aFolderStatus = $this->oImapClient->FolderStatus($sFolderName, $aTypes);
$iCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES]) $iCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] ?? 0;
? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] : 0;
$iUnseenCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN]) $iUnseenCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] ?? 0;
? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] : 0;
$sUidNext = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT]) $sUidNext = (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] ?? '0';
? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] : '0';
$sHighestModSeq = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ]) $iHighestModSeq = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] ?? 0;
? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] : '';
} }
public function GenerateImapClientHash() : string public function GenerateImapClientHash() : string
@ -593,11 +589,11 @@ class MailClient
); );
} }
public function GenerateFolderHash(string $sFolder, int $iCount, int $iUnseenCount, string $sUidNext, string $sHighestModSeq = '') : string public function GenerateFolderHash(string $sFolder, int $iCount, int $iUnseenCount, string $sUidNext, int $iHighestModSeq = 0) : string
{ {
$iUnseenCount = 0; // unneccessery $iUnseenCount = 0; // unneccessery
return \md5('FolderHash/'.$sFolder.'-'.$iCount.'-'.$iUnseenCount.'-'.$sUidNext.'-'. return \md5('FolderHash/'.$sFolder.'-'.$iCount.'-'.$iUnseenCount.'-'.$sUidNext.'-'.
$sHighestModSeq.'-'.$this->GenerateImapClientHash().'-'. $iHighestModSeq.'-'.$this->GenerateImapClientHash().'-'.
\MailSo\Config::$MessageListPermanentFilter \MailSo\Config::$MessageListPermanentFilter
); );
} }
@ -697,18 +693,18 @@ class MailClient
$iCount = 0; $iCount = 0;
$iUnseenCount = 0; $iUnseenCount = 0;
$sUidNext = '0'; $sUidNext = '0';
$sHighestModSeq = ''; $iHighestModSeq = 0;
$this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq);
$aResult = array( $aResult = array(
'Folder' => $sFolderName, 'Folder' => $sFolderName,
'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq), 'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq),
'MessageCount' => $iCount, 'MessageCount' => $iCount,
'MessageUnseenCount' => $iUnseenCount, 'MessageUnseenCount' => $iUnseenCount,
'UidNext' => (int) $sUidNext, 'UidNext' => (int) $sUidNext,
'Flags' => $aFlags, 'Flags' => $aFlags,
'HighestModSeq' => $sHighestModSeq, 'HighestModSeq' => $iHighestModSeq,
'NewMessages' => 'INBOX' === $sFolderName && \MailSo\Config::$CheckNewMessages ? 'NewMessages' => 'INBOX' === $sFolderName && \MailSo\Config::$CheckNewMessages ?
$this->getFolderNextMessageInformation($sFolderName, $sPrevUidNext, $sUidNext) : array() $this->getFolderNextMessageInformation($sFolderName, $sPrevUidNext, $sUidNext) : array()
); );
@ -726,11 +722,11 @@ class MailClient
$iCount = 0; $iCount = 0;
$iUnseenCount = 0; $iUnseenCount = 0;
$sUidNext = '0'; $sUidNext = '0';
$sHighestModSeq = ''; $iHighestModSeq = 0;
$this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); $this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq);
return $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq); return $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq);
} }
/** /**
@ -1600,7 +1596,7 @@ class MailClient
$iMessageRealCount = 0; $iMessageRealCount = 0;
$iMessageUnseenCount = 0; $iMessageUnseenCount = 0;
$sUidNext = '0'; $sUidNext = '0';
$sHighestModSeq = ''; $iHighestModSeq = 0;
$bUseSortIfSupported = $bUseSortIfSupported && $this->oImapClient->IsSupported('SORT'); $bUseSortIfSupported = $bUseSortIfSupported && $this->oImapClient->IsSupported('SORT');
@ -1617,7 +1613,7 @@ class MailClient
$oCacher = null; $oCacher = null;
} }
$this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq); $this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq);
if ($bUseFilter) if ($bUseFilter)
{ {
@ -1625,7 +1621,7 @@ class MailClient
} }
$oMessageCollection->FolderHash = $this->GenerateFolderHash( $oMessageCollection->FolderHash = $this->GenerateFolderHash(
$sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq); $sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq);
$oMessageCollection->UidNext = $sUidNext; $oMessageCollection->UidNext = $sUidNext;