• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/helper/mailbox/imap.php
  • Класс: BitrixMailHelperMailboxImap
  • Вызов: Imap::getSyncStatusTotal
public function getSyncStatusTotal()
{
	$currentDir = null;

	if (!empty($this->syncParams['currentDir']))
	{
		$currentDir = $this->syncParams['currentDir'];
	}

	$totalSyncDirs = count($this->getDirsHelper()->getSyncDirs());
	$currentSyncDirPath = MailboxDirectoryHelper::getCurrentSyncDir();
	$currentSyncDir = $this->getDirsHelper()->getDirByPath($currentSyncDirPath);

	if ($totalSyncDirs > 0 && $currentSyncDir != null)
	{
		$currentSyncDirMessages = MailMailMessageUidTable::getList([
			'select' => [
				new MainEntityExpressionField('TOTAL', 'COUNT(1)'),
			],
			'filter' => [
				'=MAILBOX_ID'  => $this->mailbox['ID'],
				'=DIR_MD5'     => $currentSyncDir->getDirMd5(),
				'==DELETE_TIME' => 0,
			],
		])->fetch();

		$currentSyncDirMessagesCount = (int)$currentSyncDirMessages['TOTAL'];
		$currentSyncDirMessagesAll = (int)$currentSyncDir->getMessageCount();
		$currentSyncDirPosition = $this->getDirsHelper()->getCurrentSyncDirPositionByDefault(
			$currentSyncDir->getPath(),
			$currentDir
		);

		if ($currentDir != null) {
			$totalSyncDirs--;
		}

		if ($currentSyncDirMessagesAll <= 0)
		{
			$progress = ($currentSyncDirPosition + 1) / $totalSyncDirs;
		}
		else
		{
			$progress = ($currentSyncDirMessagesCount / $currentSyncDirMessagesAll + $currentSyncDirPosition) / $totalSyncDirs;
		}

		return $progress;
	}
	else
	{
		return parent::getSyncStatus();
	}
}