messageMapper = $messageMapper; $this->logger = $logger; $this->mailboxMapper = $mailboxMapper; $this->previewEnhancer = $previewEnhancer; } public function process(int $limitTimestamp, Account $account): void { $mailboxes = $this->mailboxMapper->findAll($account); if ($mailboxes === []) { $this->logger->debug('No mailboxes found.'); return; } $mailboxIds = array_unique(array_map(static fn (Mailbox $mailbox) => $mailbox->getId(), $mailboxes)); $messages = []; foreach (array_chunk($mailboxIds, 1000) as $chunk) { $messages = array_merge($messages, $this->messageMapper->getUnanalyzed($limitTimestamp, $chunk)); } if ($messages === []) { $this->logger->debug('No structure data to analyse.'); return; } foreach ($mailboxes as $mailbox) { $filteredMessages = array_filter($messages, static fn ($message) => $message->getMailboxId() === $mailbox->getId()); if ($filteredMessages === []) { continue; } $processedMessages = $this->previewEnhancer->process($account, $mailbox, $filteredMessages); $this->logger->debug('Processed ' . count($processedMessages) . ' messages for structure data for mailbox ' . $mailbox->getId()); } } }