<?php
namespace ZBateson\MailMimeParser\Parser\Proxy;
use Psr\Log\LoggerInterface;
use ZBateson\MailMimeParser\Message\IMimePart;
use ZBateson\MailMimeParser\Message\UUEncodedPart;
use ZBateson\MailMimeParser\Parser\IParserService;
use ZBateson\MailMimeParser\Parser\Part\ParserPartStreamContainerFactory;
use ZBateson\MailMimeParser\Parser\PartBuilder;
use ZBateson\MailMimeParser\Stream\StreamFactory;
class ParserUUEncodedPartProxyFactory extends ParserPartProxyFactory
{
public function __construct(
protected readonly LoggerInterface $logger,
protected readonly StreamFactory $streamFactory,
protected readonly ParserPartStreamContainerFactory $parserPartStreamContainerFactory,
protected readonly string $defaultFallbackCharset = 'ISO-8859-1'
) {
}
public function newInstance(PartBuilder $partBuilder, IParserService $parser) : ParserUUEncodedPartProxy
{
$parserProxy = new ParserUUEncodedPartProxy($partBuilder, $parser);
$streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
$parent = $partBuilder->getParent()?->getPart();
\assert($parent === null || $parent instanceof IMimePart);
$part = new UUEncodedPart(
$parserProxy->getUnixFileMode(),
$parserProxy->getFileName(),
$parent,
$this->logger,
$streamContainer,
$this->defaultFallbackCharset
);
$parserProxy->setPart($part);
$streamContainer->setStream($this->streamFactory->newMessagePartStream($part));
$part->attach($streamContainer);
return $parserProxy;
}
}