aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas <jonas@freesources.org>2023-09-25 18:25:53 +0200
committerJonas <jonas@freesources.org>2023-10-23 20:50:24 +0200
commit7441ce2b11272c4401abcf5cb107d0c055b9dc99 (patch)
treec3f212a8eceec19fb9a31501558fc6d83f81f988
parent9193d8be40d216c06919f9dc476b1fdc6a43c374 (diff)
downloadnextcloud-server-7441ce2b11272c4401abcf5cb107d0c055b9dc99.tar.gz
nextcloud-server-7441ce2b11272c4401abcf5cb107d0c055b9dc99.zip
enh(IMountManager): Add method to get MountPoint from CachedMountInfo
Signed-off-by: Jonas <jonas@freesources.org>
-rw-r--r--apps/workflowengine/lib/Entity/File.php16
-rw-r--r--apps/workflowengine/tests/ManagerTest.php2
-rw-r--r--lib/private/Files/Config/UserMountCache.php2
-rw-r--r--lib/private/Files/Mount/Manager.php19
-rw-r--r--lib/public/Files/Mount/IMountManager.php12
5 files changed, 45 insertions, 6 deletions
diff --git a/apps/workflowengine/lib/Entity/File.php b/apps/workflowengine/lib/Entity/File.php
index 0f47928eb22..1f0d3a00553 100644
--- a/apps/workflowengine/lib/Entity/File.php
+++ b/apps/workflowengine/lib/Entity/File.php
@@ -7,6 +7,7 @@ declare(strict_types=1);
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
+ * @author Jonas Meurer <jonas@freesources.org>
*
* @license GNU AGPL version 3 or any later version
*
@@ -31,6 +32,7 @@ use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\GenericEvent;
use OCP\Files\InvalidPathException;
use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
use OCP\Files\Node;
use OCP\Files\NotFoundException;
use OCP\IL10N;
@@ -74,6 +76,8 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
private $userManager;
/** @var UserMountCache */
private $userMountCache;
+ /** @var IMountManager */
+ private $mountManager;
public function __construct(
IL10N $l10n,
@@ -82,7 +86,8 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
IUserSession $userSession,
ISystemTagManager $tagManager,
IUserManager $userManager,
- UserMountCache $userMountCache
+ UserMountCache $userMountCache,
+ IMountManager $mountManager
) {
$this->l10n = $l10n;
$this->urlGenerator = $urlGenerator;
@@ -91,6 +96,7 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
$this->tagManager = $tagManager;
$this->userManager = $userManager;
$this->userMountCache = $userMountCache;
+ $this->mountManager = $mountManager;
}
public function getName(): string {
@@ -143,10 +149,10 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
$fileId = $node->getId();
}
- $mounts = $this->userMountCache->getMountsForFileId($fileId, $uid);
- foreach ($mounts as $mount) {
- $userFolder = $this->root->getUserFolder($uid);
- if (!empty($userFolder->getById($fileId))) {
+ $mountInfos = $this->userMountCache->getMountsForFileId($fileId, $uid);
+ foreach ($mountInfos as $mountInfo) {
+ $mount = $this->mountManager->getMountFromMountInfo($mountInfo);
+ if ($mount && $mount->getStorage() && !empty($mount->getStorage()->getCache()->get($fileId))) {
return true;
}
}
diff --git a/apps/workflowengine/tests/ManagerTest.php b/apps/workflowengine/tests/ManagerTest.php
index 7d25bdc1e5b..a484a828492 100644
--- a/apps/workflowengine/tests/ManagerTest.php
+++ b/apps/workflowengine/tests/ManagerTest.php
@@ -35,6 +35,7 @@ use OCP\AppFramework\QueryException;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\Node\NodeCreatedEvent;
use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IConfig;
@@ -408,6 +409,7 @@ class ManagerTest extends TestCase {
$this->createMock(ISystemTagManager::class),
$this->createMock(IUserManager::class),
$this->createMock(UserMountCache::class),
+ $this->createMock(IMountManager::class),
])
->setMethodsExcept(['getEvents'])
->getMock();
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index 8a6b818d413..7502d65d044 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -463,7 +463,7 @@ class UserMountCache implements IUserMountCache {
}, $mounts);
$mounts = array_combine($mountPoints, $mounts);
- $current = $path;
+ $current = rtrim($path, '/');
// walk up the directory tree until we find a path that has a mountpoint set
// the loop will return if a mountpoint is found or break if none are found
while (true) {
diff --git a/lib/private/Files/Mount/Manager.php b/lib/private/Files/Mount/Manager.php
index 805cce658a6..e623211cc7a 100644
--- a/lib/private/Files/Mount/Manager.php
+++ b/lib/private/Files/Mount/Manager.php
@@ -10,6 +10,7 @@ declare(strict_types=1);
* @author Robin Appelman <robin@icewind.nl>
* @author Robin McCorkell <robin@mccorkell.me.uk>
* @author Roeland Jago Douma <roeland@famdouma.nl>
+ * @author Jonas <jonas@freesources.org>
*
* @license AGPL-3.0
*
@@ -33,6 +34,7 @@ use OCP\Cache\CappedMemoryCache;
use OC\Files\Filesystem;
use OC\Files\SetupManager;
use OC\Files\SetupManagerFactory;
+use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Mount\IMountManager;
use OCP\Files\Mount\IMountPoint;
use OCP\Files\NotFoundException;
@@ -226,4 +228,21 @@ class Manager implements IMountManager {
});
}
}
+
+ /**
+ * Return the mount matching a cached mount info (or mount file info)
+ *
+ * @param ICachedMountInfo $info
+ *
+ * @return IMountPoint|null
+ */
+ public function getMountFromMountInfo(ICachedMountInfo $info): ?IMountPoint {
+ $this->setupManager->setupForPath($info->getMountPoint());
+ foreach ($this->mounts as $mount) {
+ if ($mount->getMountPoint() === $info->getMountPoint()) {
+ return $mount;
+ }
+ }
+ return null;
+ }
}
diff --git a/lib/public/Files/Mount/IMountManager.php b/lib/public/Files/Mount/IMountManager.php
index a55e5758199..df2cc4c6209 100644
--- a/lib/public/Files/Mount/IMountManager.php
+++ b/lib/public/Files/Mount/IMountManager.php
@@ -26,6 +26,8 @@ declare(strict_types=1);
*/
namespace OCP\Files\Mount;
+use OCP\Files\Config\ICachedMountInfo;
+
/**
* Interface IMountManager
*
@@ -106,4 +108,14 @@ interface IMountManager {
* @since 8.2.0
*/
public function findByNumericId(int $id): array;
+
+ /**
+ * Return the mount matching a cached mount info (or mount file info)
+ *
+ * @param ICachedMountInfo $info
+ *
+ * @return IMountPoint|null
+ * @since 28.0.0
+ */
+ public function getMountFromMountInfo(ICachedMountInfo $info): ?IMountPoint;
}