generated from Nodarx/template
refactor: fetch command
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -6,7 +6,7 @@ namespace KTXM\ProviderImap\Client\Protocol\Command;
|
||||
|
||||
use KTXM\ProviderImap\Client\Protocol\IdentifierMode;
|
||||
|
||||
use KTXM\ProviderImap\Client\Protocol\Parser\FetchResponseParser;
|
||||
use KTXM\ProviderImap\Client\Protocol\FetchResultReader;
|
||||
use Generator;
|
||||
use KTXM\ProviderImap\Client\Protocol\Command\Argument\MessageTarget;
|
||||
use KTXM\ProviderImap\Client\Protocol\Command\Argument\FetchOptions;
|
||||
@@ -65,6 +65,6 @@ final class FetchManyCommand implements CommandInterface
|
||||
throw new ImapException('FETCH requires a selected mailbox.');
|
||||
}
|
||||
|
||||
return (new FetchResponseParser())->parseMany($responses);
|
||||
return (new FetchResultReader())->readMany($responses);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ namespace KTXM\ProviderImap\Client\Protocol\Command;
|
||||
|
||||
use KTXM\ProviderImap\Client\Protocol\IdentifierMode;
|
||||
|
||||
use KTXM\ProviderImap\Client\Protocol\Parser\FetchResponseParser;
|
||||
use KTXM\ProviderImap\Client\Protocol\FetchResultReader;
|
||||
use KTXM\ProviderImap\Client\Protocol\Command\Argument\MessageTarget;
|
||||
use KTXM\ProviderImap\Client\Protocol\Command\Argument\FetchOptions;
|
||||
use KTXM\ProviderImap\Client\ImapException;
|
||||
@@ -60,6 +60,6 @@ final class FetchOneCommand implements CommandInterface
|
||||
throw new ImapException('FETCH requires a selected mailbox.');
|
||||
}
|
||||
|
||||
return (new FetchResponseParser())->parseOne($responses);
|
||||
return (new FetchResultReader())->readOne($responses);
|
||||
}
|
||||
}
|
||||
+13
-9
@@ -2,23 +2,25 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace KTXM\ProviderImap\Client\Protocol\Parser;
|
||||
namespace KTXM\ProviderImap\Client\Protocol;
|
||||
|
||||
use Generator;
|
||||
use KTXM\ProviderImap\Client\ImapException;
|
||||
use KTXM\ProviderImap\Client\Message;
|
||||
use KTXM\ProviderImap\Client\Protocol\Parser\MessageParser;
|
||||
use KTXM\ProviderImap\Client\Protocol\Parser\FetchMessageParser;
|
||||
use KTXM\ProviderImap\Client\Protocol\Response\TaggedResponse;
|
||||
use KTXM\ProviderImap\Client\Protocol\Response\UntaggedResponse;
|
||||
use KTXM\ProviderImap\Client\Protocol\ResponseStream;
|
||||
|
||||
final class FetchResponseParser
|
||||
/**
|
||||
* Reads FETCH messages from a response stream and validates command completion.
|
||||
*/
|
||||
final class FetchResultReader
|
||||
{
|
||||
public function parseOne(ResponseStream $responses): Message
|
||||
public function readOne(ResponseStream $responses): Message
|
||||
{
|
||||
$message = null;
|
||||
|
||||
foreach ($this->parseMany($responses) as $summary) {
|
||||
foreach ($this->readMany($responses) as $summary) {
|
||||
if ($message !== null) {
|
||||
throw new ImapException('FETCH returned multiple messages for a single-message request.');
|
||||
}
|
||||
@@ -34,13 +36,15 @@ final class FetchResponseParser
|
||||
}
|
||||
|
||||
/**
|
||||
* Consume the generator fully to reach and validate the tagged completion.
|
||||
*
|
||||
* @return Generator<int, Message>
|
||||
*/
|
||||
public function parseMany(ResponseStream $responses): Generator
|
||||
public function readMany(ResponseStream $responses): Generator
|
||||
{
|
||||
foreach ($responses as $response) {
|
||||
if ($response instanceof UntaggedResponse && MessageParser::isFetchMessage($response->raw())) {
|
||||
yield MessageParser::parse($response->raw());
|
||||
if ($response instanceof UntaggedResponse && FetchMessageParser::isFetchMessage($response->raw())) {
|
||||
yield FetchMessageParser::parse($response->raw());
|
||||
continue;
|
||||
}
|
||||
|
||||
+4
-1
@@ -10,7 +10,10 @@ use KTXM\ProviderImap\Client\MessageAddress;
|
||||
use KTXM\ProviderImap\Client\MessagePart;
|
||||
use DateTimeInterface;
|
||||
|
||||
final class MessageParser
|
||||
/**
|
||||
* Decodes an individual untagged FETCH response into a message.
|
||||
*/
|
||||
final class FetchMessageParser
|
||||
{
|
||||
public static function isFetchMessage(string $raw): bool
|
||||
{
|
||||
Reference in New Issue
Block a user