<?php
namespace ZBateson\MailMimeParser\Parser\Proxy;
use Psr\Log\LoggerInterface;
use ZBateson\MailMimeParser\Message;
use ZBateson\MailMimeParser\Message\Factory\PartHeaderContainerFactory;
use ZBateson\MailMimeParser\Message\Helper\MultipartHelper;
use ZBateson\MailMimeParser\Message\Helper\PrivacyHelper;
use ZBateson\MailMimeParser\Parser\IParserService;
use ZBateson\MailMimeParser\Parser\Part\ParserPartChildrenContainerFactory;
use ZBateson\MailMimeParser\Parser\Part\ParserPartStreamContainerFactory;
use ZBateson\MailMimeParser\Parser\PartBuilder;
use ZBateson\MailMimeParser\Stream\StreamFactory;
class ParserMessageProxyFactory extends ParserMimePartProxyFactory
{
protected MultipartHelper $multipartHelper;
protected PrivacyHelper $privacyHelper;
public function __construct(
LoggerInterface $logger,
StreamFactory $sdf,
PartHeaderContainerFactory $phcf,
ParserPartStreamContainerFactory $pscf,
ParserPartChildrenContainerFactory $ppccf,
MultipartHelper $multipartHelper,
PrivacyHelper $privacyHelper
) {
parent::__construct($logger, $sdf, $phcf, $pscf, $ppccf);
$this->multipartHelper = $multipartHelper;
$this->privacyHelper = $privacyHelper;
}
public function newInstance(PartBuilder $partBuilder, IParserService $parser) : ParserMessageProxy
{
$parserProxy = new ParserMessageProxy($partBuilder, $parser);
$streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
$headerContainer = $this->partHeaderContainerFactory->newInstance($parserProxy->getHeaderContainer());
$childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
$message = new Message(
$this->logger,
$streamContainer,
$headerContainer,
$childrenContainer,
$this->multipartHelper,
$this->privacyHelper
);
$parserProxy->setPart($message);
$streamContainer->setStream($this->streamFactory->newMessagePartStream($message));
$message->attach($streamContainer);
return $parserProxy;
}
}