chore: ugly type juggling

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
pull/38625/head
Arthur Schiwon 12 months ago
parent 167a5f394d
commit f6ac874dbf
No known key found for this signature in database
GPG Key ID: 7424F1874854DF23

@ -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) {

@ -143,9 +143,6 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess {
return $this->path;
}
/**
* @return \OCP\Files\Storage
*/
public function getStorage() {
return $this->storage;
}

@ -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

@ -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

@ -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();
}

@ -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));
}

Loading…
Cancel
Save