|
|
|
@ -8,21 +8,22 @@ declare(strict_types=1); |
|
|
|
|
|
|
|
namespace OC\Collaboration\Reference\File; |
|
|
|
|
|
|
|
use OC\Files\Node\NonExistingFile; |
|
|
|
use OC\Files\Node\NonExistingFolder; |
|
|
|
use OCP\Collaboration\Reference\IReferenceManager; |
|
|
|
use OCP\EventDispatcher\Event; |
|
|
|
use OCP\EventDispatcher\IEventDispatcher; |
|
|
|
use OCP\EventDispatcher\IEventListener; |
|
|
|
use OCP\Files\Events\Node\NodeDeletedEvent; |
|
|
|
use OCP\Files\Events\Node\NodeRenamedEvent; |
|
|
|
use OCP\Files\NotFoundException; |
|
|
|
use OCP\Share\Events\ShareCreatedEvent; |
|
|
|
use OCP\Share\Events\ShareDeletedEvent; |
|
|
|
use Psr\Log\LoggerInterface; |
|
|
|
|
|
|
|
/** @template-implements IEventListener<Event|NodeDeletedEvent|ShareDeletedEvent|ShareCreatedEvent> */ |
|
|
|
class FileReferenceEventListener implements IEventListener { |
|
|
|
public function __construct( |
|
|
|
private IReferenceManager $manager, |
|
|
|
private LoggerInterface $logger, |
|
|
|
) { |
|
|
|
} |
|
|
|
|
|
|
|
@ -38,11 +39,12 @@ class FileReferenceEventListener implements IEventListener { |
|
|
|
*/ |
|
|
|
public function handle(Event $event): void { |
|
|
|
if ($event instanceof NodeDeletedEvent) { |
|
|
|
if ($event->getNode() instanceof NonExistingFolder || $event->getNode() instanceof NonExistingFile) { |
|
|
|
return; |
|
|
|
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]); |
|
|
|
} |
|
|
|
|
|
|
|
$this->manager->invalidateCache((string)$event->getNode()->getId()); |
|
|
|
} |
|
|
|
if ($event instanceof NodeRenamedEvent) { |
|
|
|
$this->manager->invalidateCache((string)$event->getTarget()->getId()); |
|
|
|
|