*/ class MessageCacheUpdaterListener implements IEventListener { /** @var MessageMapper */ private $mapper; /** @var LoggerInterface */ private $logger; public function __construct(MessageMapper $mapper, LoggerInterface $logger) { $this->mapper = $mapper; $this->logger = $logger; } #[\Override] public function handle(Event $event): void { if ($event instanceof MessageFlaggedEvent) { $messages = $this->mapper->findByUids($event->getMailbox(), [$event->getUid()]); $message = reset($messages); if ($message === false) { $this->logger->warning('Flagged message is not cached'); return; } $message->setFlag($event->getFlag(), $event->isSet()); $this->mapper->update($message); } elseif ($event instanceof MessageDeletedEvent) { $this->mapper->deleteByUid( $event->getMailbox(), $event->getMessageId() ); } } }