Fixed: more strong optimazation for [labs]imap_message_list_count_limit_trigger (#903)

This commit is contained in:
RainLoop Team 2015-11-27 21:14:46 +03:00
parent d844938ee3
commit d890a6d80e
2 changed files with 56 additions and 6 deletions

View file

@ -41,6 +41,11 @@ class Config
*/
public static $MessageListCountLimitTrigger = 0;
/**
* @var bool
*/
public static $MessageListUndeletedOnly = true;
/**
* @var int
*/

View file

@ -1412,7 +1412,10 @@ class MailClient
}
$sCriteriasResult = \trim($sCriteriasResult);
$sCriteriasResult .= ' UNDELETED';
if (\MailSo\Config::$MessageListUndeletedOnly)
{
$sCriteriasResult = \trim($sCriteriasResult.' UNDELETED');
}
$sFilter = \trim($sFilter);
if ('' !== $sFilter)
@ -1423,7 +1426,7 @@ class MailClient
$sCriteriasResult = \trim($sCriteriasResult);
if ('' !== \MailSo\Config::$MessageListPermanentFilter)
{
$sCriteriasResult .= ' '.\MailSo\Config::$MessageListPermanentFilter;
$sCriteriasResult = \trim($sCriteriasResult.' '.\MailSo\Config::$MessageListPermanentFilter);
}
$sCriteriasResult = \trim($sCriteriasResult);
@ -1865,7 +1868,7 @@ class MailClient
}
}
return $aResultUids;
return \is_array($aResultUids) ? $aResultUids : array();
}
/**
@ -1964,7 +1967,7 @@ class MailClient
$bUseThreadSortIfSupported = false;
}
if (0 < $iMessageRealCount)
if (0 < $iMessageRealCount && !$bMessageListOptimization)
{
$mAllSortedUids = $this->GetUids($oCacher, '', $sFilter,
$oMessageCollection->FolderName, $oMessageCollection->FolderHash, $bUseSortIfSupported);
@ -2061,13 +2064,55 @@ class MailClient
if (0 < \count($aUids))
{
$iOffset = (0 > $iOffset) ? 0 : $iOffset;
$aRequestUids = \array_slice($aUids, $iOffset, $iLimit);
$this->MessageListByRequestIndexOrUids($oMessageCollection, $aRequestUids, true);
}
}
}
else if (0 < $iMessageRealCount)
{
if ($this->oLogger)
{
$this->oLogger->Write('List optimization (count: '.$iMessageRealCount.
', limit:'.\MailSo\Config::$MessageListCountLimitTrigger.')');
}
$oMessageCollection->MessageCount = $iMessageRealCount;
$oMessageCollection->MessageUnseenCount = $iMessageUnseenCount;
if (0 < \strlen($sSearch) || $bUseFilter)
{
$aUids = $this->GetUids($oCacher, $sSearch, $sFilter,
$oMessageCollection->FolderName, $oMessageCollection->FolderHash);
if (0 < \count($aUids))
{
$oMessageCollection->MessageResultCount = \count($aUids);
$aRequestUids = \array_slice($aUids, $iOffset, $iLimit);
$this->MessageListByRequestIndexOrUids($oMessageCollection, $aRequestUids, true);
}
else
{
$oMessageCollection->MessageResultCount = 0;
}
}
else
{
$oMessageCollection->MessageResultCount = $iMessageRealCount;
if (1 < $iMessageRealCount)
{
$aRequestIndexes = \array_slice(array_reverse(range(1, $iMessageRealCount)), $iOffset, $iLimit);
}
else
{
$aRequestIndexes = \array_slice(array(1), $iOffset, $iLimit);
}
$this->MessageListByRequestIndexOrUids($oMessageCollection, $aRequestIndexes, false);
}
}
if ($bUseThreadSortIfSupported && 0 === $iThreadUid && \is_array($mAllThreads) && 0 < \count($mAllThreads))
{