Merge pull request #17175 from nextcloud/feature/noid/make-getById-work-for-files-in-appdata
Fix getById for files in appdata and the root mount
This commit is contained in:
commit
3efd9a12d7
|
@ -299,6 +299,9 @@ class Folder extends Node implements \OCP\Files\Folder {
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (count($mountsContainingFile) === 0) {
|
if (count($mountsContainingFile) === 0) {
|
||||||
|
if ($user === $this->getAppDataDirectoryName()) {
|
||||||
|
return $this->getByIdInRootMount((int) $id);
|
||||||
|
}
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,6 +330,47 @@ class Folder extends Node implements \OCP\Files\Folder {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getAppDataDirectoryName(): string {
|
||||||
|
$instanceId = \OC::$server->getConfig()->getSystemValueString('instanceid');
|
||||||
|
return 'appdata_' . $instanceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In case the path we are currently in is inside the appdata_* folder,
|
||||||
|
* the original getById method does not work, because it can only look inside
|
||||||
|
* the user's mount points. But the user has no mount point for the root storage.
|
||||||
|
*
|
||||||
|
* So in that case we directly check the mount of the root if it contains
|
||||||
|
* the id. If it does we check if the path is inside the path we are working
|
||||||
|
* in.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getByIdInRootMount(int $id): array {
|
||||||
|
$mount = $this->root->getMount('');
|
||||||
|
$cacheEntry = $mount->getStorage()->getCache($this->path)->get($id);
|
||||||
|
if (!$cacheEntry) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$absolutePath = '/' . ltrim($cacheEntry->getPath(), '/');
|
||||||
|
$currentPath = rtrim($this->path, '/') . '/';
|
||||||
|
|
||||||
|
if (strpos($absolutePath, $currentPath) !== 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$this->root->createNode(
|
||||||
|
$absolutePath, new \OC\Files\FileInfo(
|
||||||
|
$absolutePath,
|
||||||
|
$mount->getStorage(),
|
||||||
|
$cacheEntry->getPath(),
|
||||||
|
$cacheEntry,
|
||||||
|
$mount
|
||||||
|
))];
|
||||||
|
}
|
||||||
|
|
||||||
public function getFreeSpace() {
|
public function getFreeSpace() {
|
||||||
return $this->view->free_space($this->path);
|
return $this->view->free_space($this->path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue