mirror of
https://github.com/nextcloud/server.git
synced 2026-06-09 08:44:07 -04:00
fix(collaboration): Replace NonExisting* check on NodeDeletedEvent by a try/catch
Deleted nodes are always non existing, but some of them have a fileInfo. This ensure that we still run the cleanup but in a safe way. Signed-off-by: Louis Chmn <louis@chmn.me>
This commit is contained in:
parent
f960afc092
commit
b344b5323d
1 changed files with 8 additions and 6 deletions
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Reference in a new issue