diff options
author | Jonas <jonas@freesources.org> | 2023-09-25 18:25:53 +0200 |
---|---|---|
committer | Jonas <jonas@freesources.org> | 2023-10-23 20:50:24 +0200 |
commit | 7441ce2b11272c4401abcf5cb107d0c055b9dc99 (patch) | |
tree | c3f212a8eceec19fb9a31501558fc6d83f81f988 | |
parent | 9193d8be40d216c06919f9dc476b1fdc6a43c374 (diff) | |
download | nextcloud-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.php | 16 | ||||
-rw-r--r-- | apps/workflowengine/tests/ManagerTest.php | 2 | ||||
-rw-r--r-- | lib/private/Files/Config/UserMountCache.php | 2 | ||||
-rw-r--r-- | lib/private/Files/Mount/Manager.php | 19 | ||||
-rw-r--r-- | lib/public/Files/Mount/IMountManager.php | 12 |
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; } |