mirror of
https://github.com/nextcloud/server.git
synced 2026-02-28 04:20:37 -05:00
Merge pull request #52996 from nextcloud/fix/emit_hooks_on_copy
fix(node): emit hooks on `Node::copy()`
This commit is contained in:
commit
f833e2d219
2 changed files with 11 additions and 3 deletions
|
|
@ -37,6 +37,8 @@ class SyncLivePhotosListener implements IEventListener {
|
|||
private array $pendingRenames = [];
|
||||
/** @var Array<int, bool> */
|
||||
private array $pendingDeletion = [];
|
||||
/** @var Array<int> */
|
||||
private array $pendingCopies = [];
|
||||
|
||||
public function __construct(
|
||||
private ?Folder $userFolder,
|
||||
|
|
@ -153,7 +155,6 @@ class SyncLivePhotosListener implements IEventListener {
|
|||
$targetName = $targetFile->getName();
|
||||
$peerTargetName = substr($targetName, 0, -strlen($sourceExtension)) . $peerFileExtension;
|
||||
|
||||
|
||||
if ($targetParent->nodeExists($peerTargetName)) {
|
||||
// If the copy was a folder copy, then the peer file already exists.
|
||||
$targetPeerFile = $targetParent->get($peerTargetName);
|
||||
|
|
@ -225,6 +226,11 @@ class SyncLivePhotosListener implements IEventListener {
|
|||
$this->handleCopyRecursive($event, $sourceChild, $targetChild);
|
||||
}
|
||||
} elseif ($sourceNode instanceof File && $targetNode instanceof File) {
|
||||
// in case the copy was initiated from this listener, we stop right now
|
||||
if (in_array($sourceNode->getId(), $this->pendingCopies)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$peerFileId = $this->livePhotosService->getLivePhotoPeerId($sourceNode->getId());
|
||||
if ($peerFileId === null) {
|
||||
return;
|
||||
|
|
@ -234,11 +240,13 @@ class SyncLivePhotosListener implements IEventListener {
|
|||
return;
|
||||
}
|
||||
|
||||
$this->pendingCopies[] = $peerFileId;
|
||||
if ($event instanceof BeforeNodeCopiedEvent) {
|
||||
$this->runMoveOrCopyChecks($sourceNode, $targetNode, $peerFile);
|
||||
} elseif ($event instanceof NodeCopiedEvent) {
|
||||
$this->handleCopy($sourceNode, $targetNode, $peerFile);
|
||||
}
|
||||
$this->pendingCopies = array_diff($this->pendingCopies, [$peerFileId]);
|
||||
} else {
|
||||
throw new Exception('Source and target type are not matching');
|
||||
}
|
||||
|
|
|
|||
|
|
@ -938,7 +938,7 @@ class View {
|
|||
|
||||
try {
|
||||
$exists = $this->file_exists($target);
|
||||
if ($this->shouldEmitHooks()) {
|
||||
if ($this->shouldEmitHooks($target)) {
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
Filesystem::signal_copy,
|
||||
|
|
@ -978,7 +978,7 @@ class View {
|
|||
$this->changeLock($target, ILockingProvider::LOCK_SHARED);
|
||||
$lockTypePath2 = ILockingProvider::LOCK_SHARED;
|
||||
|
||||
if ($this->shouldEmitHooks() && $result !== false) {
|
||||
if ($this->shouldEmitHooks($target) && $result !== false) {
|
||||
\OC_Hook::emit(
|
||||
Filesystem::CLASSNAME,
|
||||
Filesystem::signal_post_copy,
|
||||
|
|
|
|||
Loading…
Reference in a new issue