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
*/
public $Flags;
public $Flags = array();
/**
* @var array
*/
public $PermanentFlags;
public $PermanentFlags = array();
/**
* @var int
*/
public $Exists;
public $Exists = null;
/**
* @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
*/
public $Unread;
public $Unread = null;
/**
* @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)
{
$this->FolderName = $sFolderName;
$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

View file

@ -300,32 +300,26 @@ class ResponseCollection extends \MailSo\Base\Collection
}
if (is_array($oResponse->OptionalResponse) && \count($oResponse->OptionalResponse) > 1) {
if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0] &&
is_array($oResponse->OptionalResponse[1]))
if ('PERMANENTFLAGS' === $oResponse->OptionalResponse[0]
&& is_array($oResponse->OptionalResponse[1]))
{
$oResult->PermanentFlags = $oResponse->OptionalResponse[1];
}
else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0] &&
isset($oResponse->OptionalResponse[1]))
else if ('UIDVALIDITY' === $oResponse->OptionalResponse[0])
{
$oResult->Uidvalidity = $oResponse->OptionalResponse[1];
$oResult->Uidvalidity = (int) $oResponse->OptionalResponse[1];
}
else if ('UNSEEN' === $oResponse->OptionalResponse[0] &&
isset($oResponse->OptionalResponse[1]) &&
is_numeric($oResponse->OptionalResponse[1]))
else if ('UNSEEN' === $oResponse->OptionalResponse[0])
{
$oResult->Unread = (int) $oResponse->OptionalResponse[1];
}
else if ('UIDNEXT' === $oResponse->OptionalResponse[0] &&
isset($oResponse->OptionalResponse[1]))
else if ('UIDNEXT' === $oResponse->OptionalResponse[0])
{
$oResult->Uidnext = $oResponse->OptionalResponse[1];
}
else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0] &&
isset($oResponse->OptionalResponse[1]) &&
\is_numeric($oResponse->OptionalResponse[1]))
else if ('HIGHESTMODSEQ' === $oResponse->OptionalResponse[0])
{
$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,
string &$sUidNext, string &$sHighestModSeq = '') : void
string &$sUidNext, int &$iHighestModSeq = 0) : void
{
$aTypes = array(
\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES,
@ -571,17 +571,13 @@ class MailClient
$aFolderStatus = $this->oImapClient->FolderStatus($sFolderName, $aTypes);
$iCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES])
? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] : 0;
$iCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::MESSAGES] ?? 0;
$iUnseenCount = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN])
? (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] : 0;
$iUnseenCount = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UNSEEN] ?? 0;
$sUidNext = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT])
? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] : '0';
$sUidNext = (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::UIDNEXT] ?? '0';
$sHighestModSeq = isset($aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ])
? (string) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] : '';
$iHighestModSeq = (int) $aFolderStatus[\MailSo\Imap\Enumerations\FolderResponseStatus::HIGHESTMODSEQ] ?? 0;
}
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
return \md5('FolderHash/'.$sFolder.'-'.$iCount.'-'.$iUnseenCount.'-'.$sUidNext.'-'.
$sHighestModSeq.'-'.$this->GenerateImapClientHash().'-'.
$iHighestModSeq.'-'.$this->GenerateImapClientHash().'-'.
\MailSo\Config::$MessageListPermanentFilter
);
}
@ -697,18 +693,18 @@ class MailClient
$iCount = 0;
$iUnseenCount = 0;
$sUidNext = '0';
$sHighestModSeq = '';
$iHighestModSeq = 0;
$this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq);
$this->initFolderValues($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq);
$aResult = array(
'Folder' => $sFolderName,
'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $sHighestModSeq),
'Hash' => $this->GenerateFolderHash($sFolderName, $iCount, $iUnseenCount, $sUidNext, $iHighestModSeq),
'MessageCount' => $iCount,
'MessageUnseenCount' => $iUnseenCount,
'UidNext' => (int) $sUidNext,
'Flags' => $aFlags,
'HighestModSeq' => $sHighestModSeq,
'HighestModSeq' => $iHighestModSeq,
'NewMessages' => 'INBOX' === $sFolderName && \MailSo\Config::$CheckNewMessages ?
$this->getFolderNextMessageInformation($sFolderName, $sPrevUidNext, $sUidNext) : array()
);
@ -726,11 +722,11 @@ class MailClient
$iCount = 0;
$iUnseenCount = 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;
$iMessageUnseenCount = 0;
$sUidNext = '0';
$sHighestModSeq = '';
$iHighestModSeq = 0;
$bUseSortIfSupported = $bUseSortIfSupported && $this->oImapClient->IsSupported('SORT');
@ -1617,7 +1613,7 @@ class MailClient
$oCacher = null;
}
$this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq);
$this->initFolderValues($sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq);
if ($bUseFilter)
{
@ -1625,7 +1621,7 @@ class MailClient
}
$oMessageCollection->FolderHash = $this->GenerateFolderHash(
$sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $sHighestModSeq);
$sFolderName, $iMessageRealCount, $iMessageUnseenCount, $sUidNext, $iHighestModSeq);
$oMessageCollection->UidNext = $sUidNext;