Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
enh(IMountManager): Add method to get MountPoint from CachedMountInfo
Signed-off-by: Jonas <[email protected]>
  • Loading branch information
mejo- committed Oct 26, 2023
commit 9ed1bbee5c46272282e939855775507961209fe0
16 changes: 11 additions & 5 deletions apps/workflowengine/lib/Entity/File.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*
* @author Arthur Schiwon <[email protected]>
* @author Christoph Wurst <[email protected]>
* @author Jonas Meurer <[email protected]>
*
* @license GNU AGPL version 3 or any later version
*
Expand All @@ -27,6 +28,7 @@
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;
Expand Down Expand Up @@ -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,
Expand All @@ -86,7 +90,8 @@ public function __construct(
IUserSession $userSession,
ISystemTagManager $tagManager,
IUserManager $userManager,
UserMountCache $userMountCache
UserMountCache $userMountCache,
MountManager $mountManager
) {
$this->l10n = $l10n;
$this->urlGenerator = $urlGenerator;
Expand All @@ -96,6 +101,7 @@ public function __construct(
$this->tagManager = $tagManager;
$this->userManager = $userManager;
$this->userMountCache = $userMountCache;
$this->mountManager = $mountManager;
}

public function getName(): string {
Expand Down Expand Up @@ -148,10 +154,10 @@ public function isLegitimatedForUserId(string $uid): bool {
$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))) {

Check notice

Code scanning / Psalm

PossiblyNullReference

Cannot call method getCache on possibly null value
return true;
}
}
Expand Down
2 changes: 2 additions & 0 deletions apps/workflowengine/tests/ManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -413,6 +414,7 @@ public function testUpdateOperation() {
$this->createMock(ISystemTagManager::class),
$this->createMock(IUserManager::class),
$this->createMock(UserMountCache::class),
$this->createMock(MountManager::class),
])
->setMethodsExcept(['getEvents'])
->getMock();
Expand Down
2 changes: 1 addition & 1 deletion lib/private/Files/Config/UserMountCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ public function getMountForPath(IUser $user, string $path): ICachedMountInfo {
}, $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) {
Expand Down
19 changes: 19 additions & 0 deletions lib/private/Files/Mount/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* @author Robin Appelman <[email protected]>
* @author Robin McCorkell <[email protected]>
* @author Roeland Jago Douma <[email protected]>
* @author Jonas <[email protected]>
*
* @license AGPL-3.0
*
Expand All @@ -33,6 +34,7 @@
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;
Expand Down Expand Up @@ -226,4 +228,21 @@ public function getMountsByMountProvider(string $path, array $mountProviders) {
});
}
}

/**
* 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;
}
}