]> source.dussan.org Git - nextcloud-server.git/commitdiff
enh(IMountManager): Add method to get MountPoint from CachedMountInfo 41144/head
authorJonas <jonas@freesources.org>
Mon, 25 Sep 2023 16:25:53 +0000 (18:25 +0200)
committerJonas <jonas@freesources.org>
Fri, 27 Oct 2023 08:38:57 +0000 (10:38 +0200)
Signed-off-by: Jonas <jonas@freesources.org>
apps/workflowengine/lib/Entity/File.php
apps/workflowengine/tests/ManagerTest.php
lib/private/Files/Config/UserMountCache.php
lib/private/Files/Mount/Manager.php

index b6084266c5d981612e54c3c2bddb0bccfcdccf74..7caaaf0e2258a5ec7a585aa3a9c9b05a68f84212 100644 (file)
@@ -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
  *
@@ -27,6 +28,7 @@ declare(strict_types=1);
 namespace OCA\WorkflowEngine\Entity;
 
 use OC\Files\Config\UserMountCache;
+use OC\Files\Mount\Manager as MountManager;
 use OCP\EventDispatcher\Event;
 use OCP\EventDispatcher\GenericEvent;
 use OCP\Files\InvalidPathException;
@@ -77,6 +79,8 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
        private $userManager;
        /** @var UserMountCache */
        private $userMountCache;
+       /** @var MountManager */
+       private $mountManager;
 
        public function __construct(
                IL10N $l10n,
@@ -86,7 +90,8 @@ class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
                IUserSession $userSession,
                ISystemTagManager $tagManager,
                IUserManager $userManager,
-               UserMountCache $userMountCache
+               UserMountCache $userMountCache,
+               MountManager $mountManager
        ) {
                $this->l10n = $l10n;
                $this->urlGenerator = $urlGenerator;
@@ -96,6 +101,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 {
@@ -148,10 +154,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;
                                }
                        }
index 5f92c603e1475515bd30dc7d998361ad16e6a1a2..b708d034df5f4ec10d5a787f16a2820ee6c60982 100644 (file)
@@ -27,6 +27,7 @@
 namespace OCA\WorkflowEngine\Tests;
 
 use OC\Files\Config\UserMountCache;
+use OC\Files\Mount\Manager as MountManager;
 use OC\L10N\L10N;
 use OCA\WorkflowEngine\Entity\File;
 use OCA\WorkflowEngine\Helper\ScopeContext;
@@ -413,6 +414,7 @@ class ManagerTest extends TestCase {
                                                        $this->createMock(ISystemTagManager::class),
                                                        $this->createMock(IUserManager::class),
                                                        $this->createMock(UserMountCache::class),
+                                                       $this->createMock(MountManager::class),
                                                ])
                                                ->setMethodsExcept(['getEvents'])
                                                ->getMock();
index aa362b0e9707e64b4df2fa11efe3b1a28ff73149..69eb35d1ccabd2d1f0cfa61d3c3765fcce8f2e2e 100644 (file)
@@ -456,7 +456,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) {
index 805cce658a678577541a7cddb6496c70f5aacde9..e623211cc7abecd016480c36e460a8851efbe8e4 100644 (file)
@@ -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;
+       }
 }