*/ class FileReferenceEventListener implements IEventListener { public function __construct( private IReferenceManager $manager, private LoggerInterface $logger, ) { } public static function register(IEventDispatcher $eventDispatcher): void { $eventDispatcher->addServiceListener(NodeDeletedEvent::class, FileReferenceEventListener::class); $eventDispatcher->addServiceListener(NodeRenamedEvent::class, FileReferenceEventListener::class); $eventDispatcher->addServiceListener(ShareDeletedEvent::class, FileReferenceEventListener::class); $eventDispatcher->addServiceListener(ShareCreatedEvent::class, FileReferenceEventListener::class); } /** * @inheritDoc */ public function handle(Event $event): void { if ($event instanceof NodeDeletedEvent) { try { $this->manager->invalidateCache((string)$event->getNode()->getId()); } catch (NotFoundException $e) { // Non existing node might not have an id $this->logger->debug('Could not invalidate reference cache for deleted node', ['exception' => $e]); } } if ($event instanceof NodeRenamedEvent) { $this->manager->invalidateCache((string)$event->getTarget()->getId()); } if ($event instanceof ShareDeletedEvent) { $this->manager->invalidateCache((string)$event->getShare()->getNodeId()); } if ($event instanceof ShareCreatedEvent) { $this->manager->invalidateCache((string)$event->getShare()->getNodeId()); } } }