generated from Nodarx/template
refactor: split service into ServiceBase and LiveService
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -10,10 +10,9 @@ declare(strict_types=1);
|
||||
namespace KTXM\ProviderImap\Service\Cache;
|
||||
|
||||
use KTXM\ProviderImap\Client\Protocol\Command\Argument\FetchOptions;
|
||||
use KTXM\ProviderImap\Providers\CollectionResource;
|
||||
use KTXM\ProviderImap\Providers\EntityResource;
|
||||
use KTXM\ProviderImap\Providers\MessageProperties;
|
||||
use KTXM\ProviderImap\Providers\Service;
|
||||
use KTXM\ProviderImap\Providers\ServiceBase;
|
||||
use KTXM\ProviderImap\Service\Live\LiveMailService;
|
||||
use KTXM\ProviderImap\Stores\MailboxStore;
|
||||
use KTXM\ProviderImap\Stores\MessageFileStore;
|
||||
@@ -35,7 +34,7 @@ class HarmonizationService
|
||||
/** Lifetime of a mailbox harmonization lock in seconds; long enough for a large first run */
|
||||
public const LOCK_TTL = 900;
|
||||
|
||||
private ?Service $service = null;
|
||||
private ?ServiceBase $service = null;
|
||||
private ?LiveMailService $live = null;
|
||||
|
||||
public function __construct(
|
||||
@@ -48,7 +47,7 @@ class HarmonizationService
|
||||
/**
|
||||
* Bind a service; returns a new instance so the shared one stays unbound.
|
||||
*/
|
||||
public function for(Service $service, ?LiveMailService $live = null): static
|
||||
public function for(ServiceBase $service, ?LiveMailService $live = null): static
|
||||
{
|
||||
$bound = clone $this;
|
||||
$bound->service = $service;
|
||||
@@ -72,10 +71,7 @@ class HarmonizationService
|
||||
$tenantId = (string) $service->tenantIdentifier();
|
||||
$serviceId = (string) $service->identifier();
|
||||
|
||||
$remote = [];
|
||||
foreach ($live->collectionList() as $name => $mailbox) {
|
||||
$remote[(string) $name] = (new CollectionResource($service->provider(), $serviceId))->fromImap($mailbox);
|
||||
}
|
||||
$remote = $live->collectionList();
|
||||
$cached = $this->mailboxStore->list($serviceId);
|
||||
|
||||
$result = ['added' => [], 'updated' => [], 'removed' => []];
|
||||
@@ -158,7 +154,7 @@ class HarmonizationService
|
||||
|
||||
try {
|
||||
$state = $this->mailboxStore->state($serviceId, $mailbox);
|
||||
$selected = $live->collectionFetch($mailbox)
|
||||
$selected = $live->mailboxFetch($mailbox)
|
||||
?? throw new RuntimeException("Mailbox not found on server: {$mailbox}");
|
||||
$uidValidity = $selected->uidValidity()
|
||||
?? throw new RuntimeException("Server did not report UIDVALIDITY for mailbox: {$mailbox}");
|
||||
@@ -239,7 +235,7 @@ class HarmonizationService
|
||||
$options = FetchOptions::message()->withBodyText(MessageIngestor::BODY_TEXT_LIMIT);
|
||||
|
||||
$ingested = [];
|
||||
foreach ($live->entityFetch($mailbox, $options, ...$uids) as $message) {
|
||||
foreach ($live->messageFetch($mailbox, $options, ...$uids) as $message) {
|
||||
$entity = (new EntityResource($service->provider(), $serviceId))->fromImap($message, $mailbox);
|
||||
array_push($ingested, ...$this->ingestor->ingest($tenantId, $serviceId, $uidValidity, $entity));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user