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

61 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2020-2024 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Mail\Service\Classification\FeatureExtraction;
use OCA\Mail\Account;
use OCA\Mail\Db\Message;
use function OCA\Mail\array_flat_map;
/**
* Combines a set of DI'ed extractors so they can be used as one class
*/
class CompositeExtractor implements IExtractor {
private readonly SubjectExtractor $subjectExtractor;
/** @var IExtractor[] */
private readonly array $extractors;
public function __construct(
ImportantMessagesExtractor $ex1,
ReadMessagesExtractor $ex2,
RepliedMessagesExtractor $ex3,
SentMessagesExtractor $ex4,
SubjectExtractor $ex5,
) {
$this->subjectExtractor = $ex5;
$this->extractors = [
$ex1,
$ex2,
$ex3,
$ex4,
$ex5,
];
}
#[\Override]
public function prepare(Account $account,
array $incomingMailboxes,
array $outgoingMailboxes,
array $messages): void {
foreach ($this->extractors as $extractor) {
$extractor->prepare($account, $incomingMailboxes, $outgoingMailboxes, $messages);
}
}
#[\Override]
public function extract(Message $message): array {
return array_flat_map(static fn (IExtractor $extractor) => $extractor->extract($message), $this->extractors);
}
public function getSubjectExtractor(): SubjectExtractor {
return $this->subjectExtractor;
}
}