diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2023-06-08 23:32:16 +0200 |
---|---|---|
committer | backportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com> | 2023-06-23 23:04:44 +0000 |
commit | f724760f67bbd8c177dd716fa3b95e990a787bda (patch) | |
tree | bfb115595d67f212eecdf85a3a7099af63c8c2e9 | |
parent | faea2440ed8b7bf9614556b88fc0c8357ac9cf84 (diff) | |
download | nextcloud-server-f724760f67bbd8c177dd716fa3b95e990a787bda.tar.gz nextcloud-server-f724760f67bbd8c177dd716fa3b95e990a787bda.zip |
chore: ugly type juggling
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
-rw-r--r-- | lib/private/Files/Cache/QuerySearchHelper.php | 18 | ||||
-rw-r--r-- | lib/private/Files/FileInfo.php | 3 | ||||
-rw-r--r-- | lib/private/Files/Node/Folder.php | 11 | ||||
-rw-r--r-- | lib/private/Files/Node/Node.php | 16 | ||||
-rw-r--r-- | lib/private/Files/Node/Root.php | 4 | ||||
-rw-r--r-- | tests/lib/Files/Node/FolderTest.php | 8 |
6 files changed, 37 insertions, 23 deletions
diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index 52663213b16..b4376eb2d98 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -195,23 +195,33 @@ class QuerySearchHelper { } /** - * @return array{array<string, ICache>, array<string, IMountPoint>} + * @return list{0?: array<array-key, ICache>, 1?: array<array-key, IMountPoint>} */ public function getCachesAndMountPointsForSearch(IRootFolder $root, string $path, bool $limitToHome = false): array { $rootLength = strlen($path); - $mount = $root->getMount($path); - $storage = $mount->getStorage(); + $storage = null; + if (method_exists($root, 'getMount')) { + /** @var IMountPoint $mount */ + $mount = $root->getMount($path); + $storage = $mount->getStorage(); + } + if ($storage === null) { + return []; + } $internalPath = $mount->getInternalPath($path); if ($internalPath !== '') { // a temporary CacheJail is used to handle filtering down the results to within this folder + /** @var ICache[] $caches */ $caches = ['' => new CacheJail($storage->getCache(''), $internalPath)]; } else { + /** @var ICache[] $caches */ $caches = ['' => $storage->getCache('')]; } + /** @var IMountPoint[] $mountByMountPoint */ $mountByMountPoint = ['' => $mount]; - if (!$limitToHome) { + if (!$limitToHome && method_exists($root, 'getMountsIn')) { /** @var IMountPoint[] $mounts */ $mounts = $root->getMountsIn($path); foreach ($mounts as $mount) { diff --git a/lib/private/Files/FileInfo.php b/lib/private/Files/FileInfo.php index d9b773cc2a6..2b6b83a2546 100644 --- a/lib/private/Files/FileInfo.php +++ b/lib/private/Files/FileInfo.php @@ -143,9 +143,6 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { return $this->path; } - /** - * @return \OCP\Files\Storage - */ public function getStorage() { return $this->storage; } diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index 1d6d88bafe6..cf58a0b1ef1 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -330,8 +330,13 @@ class Folder extends Node implements \OCP\Files\Folder { * @return array */ protected function getByIdInRootMount(int $id): array { - $mount = $this->root->getMount(''); - $cacheEntry = $mount->getStorage()->getCache($this->path)->get($id); + $storage = null; + if (\method_exists($this->root, 'getMount')) { + /** @var IMountPoint $mount */ + $mount = $this->root->getMount(''); + $storage = $mount->getStorage(); + } + $cacheEntry = $storage?->getCache($this->path)->get($id); if (!$cacheEntry) { return []; } @@ -346,7 +351,7 @@ class Folder extends Node implements \OCP\Files\Folder { return [$this->root->createNode( $absolutePath, new \OC\Files\FileInfo( $absolutePath, - $mount->getStorage(), + $storage, $cacheEntry->getPath(), $cacheEntry, $mount diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php index 4804f7046aa..4ba2c472c67 100644 --- a/lib/private/Files/Node/Node.php +++ b/lib/private/Files/Node/Node.php @@ -35,6 +35,7 @@ use OC\Files\Utils\PathHelper; use OCP\Files\FileInfo; use OCP\Files\InvalidPathException; use OCP\Files\IRootFolder; +use OCP\Files\Node as INode; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Lock\LockedException; @@ -42,7 +43,7 @@ use OCP\PreConditionNotMetException; use Symfony\Component\EventDispatcher\GenericEvent; // FIXME: this class really should be abstract -class Node implements \OCP\Files\Node { +class Node implements INode { /** * @var \OC\Files\View $view */ @@ -128,7 +129,9 @@ class Node implements \OCP\Files\Node { $args = !empty($args) ? $args : [$this]; $dispatcher = \OC::$server->getEventDispatcher(); foreach ($hooks as $hook) { - $this->root->emit('\OC\Files', $hook, $args); + if (method_exists($this->root, 'emit')) { + $this->root->emit('\OC\Files', $hook, $args); + } $dispatcher->dispatch('\OCP\Files::' . $hook, new GenericEvent($args)); } } @@ -288,10 +291,7 @@ class Node implements \OCP\Files\Node { return $this->getFileInfo(false)->isCreatable(); } - /** - * @return Node - */ - public function getParent() { + public function getParent(): INode|IRootFolder { if ($this->parent === null) { $newPath = dirname($this->path); if ($newPath === '' || $newPath === '.' || $newPath === '/') { @@ -400,7 +400,7 @@ class Node implements \OCP\Files\Node { /** * @param string $targetPath - * @return \OCP\Files\Node + * @return INode * @throws InvalidPathException * @throws NotFoundException * @throws NotPermittedException if copy not allowed or failed @@ -426,7 +426,7 @@ class Node implements \OCP\Files\Node { /** * @param string $targetPath - * @return \OCP\Files\Node + * @return INode * @throws InvalidPathException * @throws NotFoundException * @throws NotPermittedException if move not allowed or failed diff --git a/lib/private/Files/Node/Root.php b/lib/private/Files/Node/Root.php index e9fb14e5364..0ed1bcab2ae 100644 --- a/lib/private/Files/Node/Root.php +++ b/lib/private/Files/Node/Root.php @@ -45,6 +45,7 @@ use OCP\Files\Config\IUserMountCache; use OCP\Files\Events\Node\FilesystemTornDownEvent; use OCP\Files\IRootFolder; use OCP\Files\Mount\IMountPoint; +use OCP\Files\Node as INode; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\IUser; @@ -339,10 +340,9 @@ class Root extends Folder implements IRootFolder { } /** - * @return Node * @throws \OCP\Files\NotFoundException */ - public function getParent() { + public function getParent(): INode|IRootFolder { throw new NotFoundException(); } diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php index d745a05ba17..0bcf69c5c13 100644 --- a/tests/lib/Files/Node/FolderTest.php +++ b/tests/lib/Files/Node/FolderTest.php @@ -24,6 +24,7 @@ use OC\Files\Search\SearchQuery; use OC\Files\Storage\Temporary; use OC\Files\Storage\Wrapper\Jail; use OCP\Files\Cache\ICacheEntry; +use OCP\Files\IRootFolder; use OCP\Files\Mount\IMountPoint; use OCP\Files\NotFoundException; use OCP\Files\Search\ISearchComparison; @@ -462,12 +463,13 @@ class FolderTest extends NodeTest { } public function testIsSubNode() { - $file = new Node(null, $this->view, '/foo/bar'); - $folder = new Folder(null, $this->view, '/foo'); + $rootFolderMock = $this->createMock(IRootFolder::class); + $file = new Node($rootFolderMock, $this->view, '/foo/bar'); + $folder = new Folder($rootFolderMock, $this->view, '/foo'); $this->assertTrue($folder->isSubNode($file)); $this->assertFalse($folder->isSubNode($folder)); - $file = new Node(null, $this->view, '/foobar'); + $file = new Node($rootFolderMock, $this->view, '/foobar'); $this->assertFalse($folder->isSubNode($file)); } |