f7cloud_client/apps/mail/lib/Service/PreprocessingService.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

64 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2022 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Mail\Service;
use OCA\Mail\Account;
use OCA\Mail\Db\Mailbox;
use OCA\Mail\Db\MailboxMapper;
use OCA\Mail\Db\MessageMapper;
use OCA\Mail\IMAP\PreviewEnhancer;
use Psr\Log\LoggerInterface;
class PreprocessingService {
private MailboxMapper $mailboxMapper;
private MessageMapper $messageMapper;
private LoggerInterface $logger;
private PreviewEnhancer $previewEnhancer;
public function __construct(
MessageMapper $messageMapper,
LoggerInterface $logger,
MailboxMapper $mailboxMapper,
PreviewEnhancer $previewEnhancer,
) {
$this->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());
}
}
}